Ошибка при извлечении из курсора с использованием Oracle Pro * C - PullRequest
2 голосов
/ 03 августа 2011

Я конвертирую программу ingres C в Oracle Pro * C.

Я создаю и открываю курсор, чтобы выполнить SELECT (не SELECT FOR UPDATE).

Существующая программа делает (примерно)

EXEC SQL DECLARE N CURSOR for SELECT...
EXEC SQL OPEN N
EXEC SQL FETCH N INTO :new
while (sqlca.sqlcode != 100) {
  // process the contents of :new
  EXEC SQL FETCH N INTO :new
}
EXEC SQL CLOSE N;

Когда я достигаю последней строки, возвращаемой оператором select, я получаю сообщение об ошибке: ORA-01002: извлечение из последовательности.

Я не хочу помещать мой код очистки в мой обработчик ошибок; Я бы предпочел, чтобы цикл выходил чисто.

1 Ответ

3 голосов
/ 03 августа 2011

Фактически, тщательный анализ (под которым я подразумеваю «тонны printf () s») показывает, что sqlca.sqlcode никогда не будет ничем иным, кроме нуля, пока цикл не завершится.

Так что я просто изменил условие в цикле на

while (sqlca.sqlcode =='\0') 

вместо

while (sqlca.sqlcode != 100)

И все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...