在FETCH游标过程中UPDATE数据出错
程序是用C写的:
int patchdata()
{
EXEC SQL DECLARE tmpnum CURSOR FOR
SELECT ACC_NBR FROM TMP_NUM;
EXEC SQL OPEN tmpnum;
int rows=0;
for (int i=0;i<10;i++)
{
InitialDataInfo();
EXEC SQL FETCH tmpnum INTO :m_gszACC_NBR;
if (sqlca.sqlcode == 100)
{
break;
}
GetDataInfo();
//printDataInfo();
updatedata();
rows++;
if(rows%500==0)
{
printf("已处理数据%d条\n", rows);
}
}
EXEC SQL CLOSE tmpnum;
return 0;
}
void updatedata()
{
EXEC SQL UPDATE TMP_NUM SET DISTRICT_NO=:m_gszDISTRICT_NO,
DISTRICT_NAME=:m_gszDISTRICT_NAME,BRANCH_NO=:m_gszBRANCH_NO,
BRANCH_NAME=:m_gszBRANCH_NAME,SUB_BRANCH_NO=:m_gszSUB_BRANCH_NO,
SUB_BRANCH_NAME=:m_gszSUB_BRANCH_NAME,BUILD_NO=:m_gszBUILD_NO,
BUILD_NAME=:m_gszBUILD_NAME,LINE_TEST_NO=:m_gszLINE_TEST_NO,
LINE_TEST_NAME=:m_gszLINE_TEST_NAME WHERE ACC_NBR=:m_gszACC_NBR;
}
经测试发现程序在运行到updatedata()函数的时候,发生一个错误:
SQLCODE = -16843171
ct_results(): user api layer: external error: This routine cannot be called until all fetchable results have been completely processed.
而且,之后就不能继续 FETCH tmpnum INTO :m_gszACC_NBR了。