Proc批量处理需要注意的问题

来源:互联网 发布:泰拉瑞亚手机联机软件 编辑:程序博客网 时间:2024/05/22 02:22

 ProC中批量读取游标中的数据的时候,需要注意:最后一次批量读取游标中的数据的时候,数据被取到HostArray中,同时sqlca.sqlcode被置为1403(NO_DATA_FOUND)。如果在fetch后立即判断sqlca.sqlcode的话,可能就导致最后一次的数据取不到。
       保险的办法是定义一个变量记录上次的读取条数:
if (sqlca.sqlcode==1403 && sqlca.sqlerrd[2]<=nLastCount)
{
    break;
}
nLastCount = sqlca.sqlerrd[2];

 好的写法是:不在fetch后判断sqlca.sqlcode,而是使用do{}while(sqlca.sqlcode!=1403);来判断,代码更简洁些!

do
{
    EXEC SQL FTECH CurName INTO :HostArray;
    int nCount = sqlca.sqlerrd[2] - nLastCount;
    //...
} while(sqlca.sqlcode!=1403);

 

注:

1403 表示刚才的语句没有找到符合条件的记录。有这么几种情况:

1。DML(insert,delete,update)没有找到一条记录
2。fetch 不到记录了
3。select into 没有找到记录

原创粉丝点击