При работе со встроенным SQL в RPG вы часто сталкиваетесь с курсором и циклом dow
для обработки всех строк в вашем результате. Условие в цикле каким-то образом зависит от SQLCOD
и/или SQLSTT
, каких-то глобально доступных переменных в SQLRPGLE-программе?
Но как правильно проверить эти значения? Некоторые предлагают SQLCOD = 0
другие not (SQLCOD = +100 or SQLSTT = '02000')
. Один не работает со всеми предупреждениями, другой не дает сбоев при некоторых ошибках, поэтому я не доволен.
Чтобы проиллюстрировать, что я делаю с некоторым кодом:
Pmain B
D PI
Dmy_ds E DS extname(SOME_TABLE)
D qualified
/free
exec sql
DECLARE cur CURSOR FOR
SELECT *
FROM some_table;
exec sql
OPEN cur;
exec sql
FETCH cur
INTO :my_ds;
dow sql_found();
exec sql
FETCH cur
INTO :my_ds;
enddo;
exec sql
CLOSE cur;
/end-free
Pmain E
Psql_found B
D PI N
/free
// insert return statement here...
/end-free
Psql_found E
Я ищу здесь правильный оператор возврата, который заставит меня просмотреть все строки, если не произойдет ошибки, и позволит мне уйти, когда произойдет ошибка. Бонусные баллы за достойный способ проверки на наличие ошибок.