Oracle SQL游标无限,即使未找到时也不中断

Oracle SQL游标无限,即使未找到时也不中断,oracle,oracle-pro-c,Oracle,Oracle Pro C,我用C编写的sql代码很简单: ... memset(statement, '\0', sizeof(statement)); sprintf(statement, sizeof(statement), "select col1, col2 from table1"); EXEC SQL PREPARE SEL_INSTR FROM :statement; EXEC SQL DECLARE MY_CURSOR CURSOR FOR SEL_INSTR; EXEC SQL OPEN MY_CUR

我用C编写的sql代码很简单:

...
memset(statement, '\0', sizeof(statement));
sprintf(statement, sizeof(statement), "select col1, col2 from table1");

EXEC SQL PREPARE SEL_INSTR FROM :statement;
EXEC SQL DECLARE MY_CURSOR CURSOR FOR SEL_INSTR;
EXEC SQL OPEN MY_CURSOR;
EXEC SQL WHENEVER NOT FOUND DO break;
...

while(1){
   EXEC SQL FETCH MY_CURSOR INTO :dt1, :dt2;
   current_row++;
}

EXEC SQL CLOSE MY_CURSOR;

...

在我的表格中,我有4行od数据。奇怪的是,即使使用DO BREAK,我的循环也会无限期地继续下去。我是否缺少一些sql指令?

我已经很长时间没有使用嵌入式sql了,但我认为您正在混淆sql和C代码。SQL中断只会退出到C代码,而不会退出C代码中的while循环。@Hogan谢谢Hogam,但我是根据oracle文档做这句话的。它说要中断循环,请使用以下语句:execsql,无论何时未找到,都要中断@霍根嗯。。。根据文档,尝试将while更改为for@Hogan难以置信,但这解决了问题。老实说,我不知道为什么。谢谢你,霍根。