ESQL使用方法

宿主变量定义:
EXEC SQL BEGIN DECLARE SECTION;
long    ncards=0;
char    sTRDT[TRDT_LEN+1];
EXEC SQL END DECLARE SECTION;
Selcet、临时表、宿主变量的引用(:):
EXEC SQL SELECT eviaa.sbno,eviaa.scdt,eviaa.skst,eviaa.acbl,eviaa.trdt,eviaa.stcd,eviaa.acno,gdsba.sbnm,gdsba.sbno FROM gdsba,eviaa
WHERE gdsba.sbno = eviaa.sbno
AND eviaa.sbno = :sbnoarray[i]
ORDER BY scdt INTO TEMP tmp_gdsba;

 

索引的创建(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;
	}
 
第六章 嵌入式SQL(E-SQL)简介 3 第一节 什么是嵌入SQL语言? 3 1.1 嵌入SQL程序的组成元素 3 1.2 什么是静态SQL和动态SQL? 4 1.3 什么是SQLCA? 4 1.4 什么是SQLDA? 5 第二节 SYBASE SQL SERVER嵌入式SQL语言 5 2.1 一个嵌入SQL语言的简单例子 5 2.2 嵌入SQL的处理过程 6 2.3 嵌入SQL语句总览 7 2.3.1 宿主变量 7 2.3.2 连接数据库 12 2.3.3 数据的查询和修改 13 2.3.4 游标的使用 14 2.3.5 SQLCA 15 2.3.6 WHENEVER 17 2.3.7 批处理 18 2.3.8 事务 18 2.4动态SQL语句 19 2.4 .1 动态修改 19 2.4.2 动态游标 21 2.4.3 SQLDA 23 2.4.4 DESCRIBE语句 27 2.5 两个例子程序 27 2.5.1 TELECOM程序 27 2.5.2 ADHOC程序 29 第三节 IBM DB2嵌入SQL语言 35 3.1 一个简单示例 35 3.2 嵌入SQL语句 37 3.2.1宿主变量 37 3.2.2单行查询 39 3.2.3多行查询 39 3.2.4插入、删除和修改操作 40 3.2.5 SQLCA 44 3.2.6事务 46 3.3 DB2的嵌入SQL程序处理过程 46 3.4 DB2的动态SQL嵌入语句 53 3.4.1 基本方法 53 3.4.2 动态游标 55 3.4.3 SQLDA 55 第四节 ORACLE数据库的嵌入SQL语言 66 4.1 基本的SQL语句 66 4.1.1宿主变量和指示符 66 4.1.2 查询 68 4.1.3 修改数据 68 4.1.4 游标 68 4.2 嵌入PL/SQL 71 4.3 动态SQL语句 72 4.3.1 ORACLE动态SQL语句的一些特点 72 4.3.2 使用动态SQL的四种方法 72 4.3.3 SQLDA 75 第五节INFORMIX的嵌入SQL/C语言 89 5.1 一个简单的入门例子 89 5.2 宿主变量 91 5.3 嵌入SQL的处理过程 96 5.4 动态SQL语言 96 5.4.1 SQLDA 97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言 105 6.1 一个嵌入SQL语言的简单例子 105 6.2 嵌入SQL的处理过程 106 6.3 嵌入SQL语句 112 6.3.1 声明嵌入SQL语句中使用的C变量 112 6.3.2 连接数据库 115 6.3.3 数据的查询和修改 115 6.3.4 游标的使用 116 6.3.5 SQLCA 117 6.3.6 WHENEVER 118 6.4动态SQL语句 119 6.4 .1 动态修改 119 6.4.2 动态游标 120 6.4.3 SQLDA 122 6.4.4 DESCRIBE语句 130 6.5 API 130
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值