[IDS培训文档]第六章 ESQL/C的使用

第六章 ESQL/C的使用
1、prepare语句的使用
在SQL中使用prepar语句后可以根据应用程序提供的不同的values来执行多遍,而语法分析却仅执行一遍。当一个SQL语句在同一应用程序中被重复执行多遍时,用prepare的方法可以大大提高性能和效率。Prepare语法:
$prepare p_id from “insert into tabname (..) values (?…?)
2、插入游标(insert cursor)的使用
插入游标中的put语句使用了insert buffer,从而可以将多条insert语句一次性地写入共享内存缓冲区中,因为减少了写缓冲区的I/O次数,故可提高性能。插入游标语法:
$declare cursor_name cursor for insert into tabnem(…) values (…);

$open cursor_name;

$put cursor_name;

或者
$prepare insert_name from “insert into tabname(…) values (?…?);

$declare cursor_name cursor for insert_name;

$open  cursor_name;

$put cursor_name;
3、滚动游标(scroll cursor)的使用
使用滚动游标的好处在于可以前后检索结构集中的记录,这对于需反复访问结果的应用很有用。但是当表很大,且经常进行幅度很大的记录检索时,会导致创建很大的临时表,效率低。建议使用时:
1)定义滚动游标时可以选择尽可能少的游标或者可能少的字段,比如只选择表中的主关键字,然后再由此选出表中相应的记录;
2)如果可以不用滚动游标,则应该避免使用;
3)如果返回结果确信只有一条记录,则应该避免使用游标;
4)应该避免游标的嵌套使用。
滚动游标语法:
$declare cursor_name scroll cursor for …;

$open cursor_name;
4、修改游标(update cursor)的使用
$declare cursor_name cursor for … for update

$update … where current of cursor_name;
5、SQL交换区sqlca(sql communication area)的使用
每当执行完一个SQL语句,Online都会将执行情况返回到sqlca这个结构中,其中包括一下信息:
1)最近运行的SQL语句完成情况;
2)有关性能的一些信息;
3)对一些可能发生或者已经发生情况的警告;
sqlca机构为:
struct sqlca_s
{
long sqlcode;
char sqlerrm[72];
char sqlerrp[8];
long sqlerrd[6];
struct sqlcaw_s;
{
char sqlwarn0;
char sqlwarn1;
char sqlwarn2;
char sqlwarn3;
char sqlwarn4;
char sqlwarn5;
char sqlwarn6;
char sqlwarn7;
}sqlwarn;
}sqlca;
当调用SQL出错时,往往凭sqlcode的返回码不能确定出错原因,还应该返回ISAM错误码sqlerrd[1]。
6、 存储过程(stored procedure)的使用
存储过程是用户用Informix提供的SPL(stored procedure lauguage)语言,编制的一些数据库操作。可以用以下语法创建、使用存储过程:
$create procedure p_name(…)

end procedure

$execute p_name;
存储过程创建时,数据库会编译存储过程,产生数据库查询计划,并将其翻译成数据库文件存储在IDS数据库的系统表sysprocedures。存储过程的所有授权用户都可以调用该过程。具体调用时,IDS会从系统表sysprocedures中读出存储过程,转换成执行代码,运行它。对于经常被反复执行的一段SQL语句,若采用存储过程的方法,既可以减少程序的复杂度,而且应用和数据库之间的交互由一条SQL语句变为一个存储过程名,大大减少了交互数据量。其次因为可以提高一些系统性能。另外不同的应用程序可以共享一个存储过程,从而消除冗馀代码。此外,在client/server环境中亦有利于代码维护;通过使用存储过程的安全等级,可以限制用户的一些非法操作,如禁止用户对数据库表的访问等。
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24955184/viewspace-772256/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24955184/viewspace-772256/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值