pro*c一个游标嵌套问题,无法解决,望大家帮忙
machine_id load_item
1 1
2 2
3 3
4 4
5
我想通过游标嵌套遍历删除(machine_id,load_item)中最近执行的指令
即分别删除(1,1),(1,2),(1,3)......(5,3),(5,4)共20个表中最近执行的指令
我写的代码如下:
void sql()
{
EXEC SQL BEGIN DECLARE SECTION;
int a;
int b;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE bssp_machine_cursor CURSOR FOR SELECT MACHINE_ID FROM bssp_machine;
EXEC SQL OPEN bssp_machine_cursor;
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL DECLARE bssp_batch_load_config_cursor CURSOR FOR SELECT LOAD_ITEM FROM bssp_batch_load_config;
EXEC SQL OPEN bssp_batch_load_config_cursor;
EXEC SQL WHENEVER NOT FOUND DO break;
for(;;)
{
EXEC SQL FETCH bssp_machine_cursor INTO :a;
for(;;)
{
EXEC SQL FETCH bssp_batch_load_config_cursor INTO :b;
printf("a的值:%d,b的值:%d\n",a,b);
EXEC SQL DELETE FROM bssp_batch_load_log WHERE MACHINE_ID=:a and LOAD_ITEM =:b and LAST_DONE_DATE=(SELECT max(LAST_DONE_DATE) FROM bssp_batch_load_log WHERE MACHINE_ID=:a and LOAD_ITEM =:b);
if(sqlca.sqlcode==0)
cout<<"删除成功!"<<endl;
else
{
cout<<"删除失败!"<<endl;
EXEC SQL ROLLBACK;
cout<<"删除失败!"<<endl;
EXEC SQL CLOSE bssp_batch_load_config_cursor;
cout<<"删除失败!"<<endl;
}
}
}
EXEC SQL CLOSE bssp_batch_load_config_cursor;
EXEC SQL CLOSE bssp_machine_cursor;
}
可是执行的结果却是
a的值:1,b的值:1 删除成功!
a的值:2,b的值:2 删除成功!
a的值:3,b的值:3 删除成功!
a的值:4,b的值:4 删除成功!
只删了4个表的指令,没有完成遍历
不知道如何修改,所以来请教大家下