EC数据库操作实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

宿主变量定义:

EXEC SQL BEGIN DECLARE SECTION;

EXEC SQL END DECLARE SECTION;

Selcet、临时表、宿主变量的引用(:):

EXEC SQL select

eviaa.sbno,eviaa.scdt,eviaa.skst,eviaa.acbl,eviaa.trdt,eviaa.stcd,eviaa.acno,g dsba.sbnm,gdsba.sbno from gdsba,eviaa

where gdsba.sbno = eviaa.sbno

and eviaa.sbno = :sbnoarray[i]

order by scdt into TEMP tmp_gdsb a;

索引的创建(Based on 字段):

EXEC SQL create index tmp_gdsba_idx1 on tmp_gdsba(scdt);

创建原则:

1.经常作为where条件的字段要创建索引。

2.重复值比较多的字段,创建索引的作用不大。例如,对于记录状态jiluzt这样的字段,它只有十多个有效的值,对应几十万的记录,在索引中有没有这个字段,意义不是很大。

3.要把重复值少的字段放在复合索引前面。对于sql语句,如果前面的条件就可以确定一条记录的话,就不必去比较后面的字段了。比如:表akhzh创建索引的时候,如果需要创建一个khzhlx和kehuzh的索引,就需要把kehuzh放在前面。这样才可以准确、快速的定位到要查找的记录。

4.索引最好不要创建太多,一般一个表不要超过8个。能合并的索引应该合并。索引其实是牺牲insert,delete的效率来提高select的效率,如果索引过多,表的insert和update是的速度将很慢。

5.索引的合并。不必要的、重复的索引应该删除,可以减少数据库占用的空间,提高数据库insert,update的效率。如果两个或者几个索引的前几个字段相同,并且除去相同的字段,后面的字段的重复值又很多,那么这几个索引就可以合并成字段少的那个索引。

游标

EXEC SQL select sATNU,sFOSQ,sTRDT,sSBNO,sSTCD from trlga

where stIn.sATNU=sATNU

and stIn.sTRDT=sTRDT

order by sTRDT info tmp_trlga_7627

;

if (SQLCODE != 0 && SQLCODE != SQLNOTFOUND)

{

BtTrace(__FILE__,__LINE__,"select trgla err, SQLCODE[%d]",SQLCODE);

return FAIL;

}

EXEC SQL DECLARE trlga_cur CURSOR FOR

select sATNU,sFOSQ,sTRDT,sSBNO,sSTCD from tmp_trlga7627

;

if (SQLCODE != 0)

{

BtTrace(__FILE__,__LINE__,"delcare cursor trgla_cur err, SQLCODE[%d]",SQLCODE);

return FAIL;

}

EXEC SQL OPEN eviaa_cur;

if (SQLCODE != 0)

{

BtTrace(__FILE__,__LINE__,"open cursor trgla_cur err, SQLCODE[%d]",SQLCODE);

return FAIL;

}

EXEC SQL FETCH trgla_cur into :sATNU,:sFOSQ, :sTRDT, :sSBNO, :sSTCD;

if(SQLCODE != SQLNOTFOUND && SQLCODE != 0)

{

BtTrace(__FILE__,__LINE__,"Fail to fetch cur trgla_cur, SQLCODE[%d]\n",SQLCODE);

EXEC SQL close trgla_cur;

EXEC SQL free trgla_cur;

return FAIL;

}

if(SQLCODE == SQLNOTFOUND)

break;

EXEC SQL close eviaa_cur;

if(SQLCODE)

{

BtTrace(__FILE__,__LINE__,"close eviaa_cur err (%d)\n",SQLCODE);

return FAIL;

}

EXEC SQL free eviaa_cur;

if(SQLCODE)

{

BtTrace(__FILE__,__LINE__,"free eviaa_cur err (%d)\n",SQLCODE);

return FAIL;

}

Embedded SQL错误代码:

SQLCODE=0表示SQL语句执行成功;

SQLCODE=100表示没有找到相应的记录;//define SQLNOTFOUND 100 SQLCODE=-239表示插入重复值;

相关文档
最新文档