程序中有一段代码,是做数据的批量抽出,每循环一次抽出5000条数据,但当第一次抽出返回的sqlca.sqlcode=1405的时候,发生了一个很奇怪的问题,就是第一次的抽出只能抽出一条数据,但后面的抽出就没问题了.代码和执行结果如下:
for(;;)
{
    EXEC SQL FETCH MKCPTRT01_CUR INTO :sPnt_Data1;---------------->sPnt_Data1是一个数组,定义:sPnt_Data1[5000]
    printf("sqlcode    =%d\n",sqlca.sqlcode);
    printf("sqlca.sqlerrd[2]    =%d\n",sqlca.sqlerrd[2]);
}满足抽出条件的数据有10000条,其中每条数据都有一个字段的值是NULL.打印出的效果如下:
sqlcode=-1405
sqlca.sqlerrd[2]=1
sqlcode=-1405
sqlca.sqlerrd[2]=5000
sqlcode=-1403
sqlca.sqlerrd[2]=4999问题:为什么执行结果不是下面这样的?如果数据中没有NULL的时候,可以得到下面的结果.
sqlcode=0
sqlca.sqlerrd[2]=5000
sqlcode=0
sqlca.sqlerrd[2]=5000
实在想不出是什么原因造成的,有谁知道,请多多指教,先谢过了.

解决方案 »

  1.   

    sql语句选出的结果中存在null值会导致1405错误。
    把sql中可能返回null值的列使用nvl函数,比如nvl(colName,'*')
      

  2.   

    如果是做NVL处理的话肯定就不会有这个问题了,关键是这些字段在表中是可以为NULL的,需要原样抽出,不能做NVL处理.我的问题是,1405的情况下,为什么第一次只抽出一条,而不是5000条?为什么第二次抽出的时候,虽然也有1405的情况,但可以抽出5000?