#oracle #stored-procedures #plsql #cursor #teradata
#Oracle #хранимые процедуры #plsql #курсор #teradata
Вопрос:
какой эквивалент Oracle CURSOR%NOTFOUND
найден в Teradata?
Если нет, то как я могу перевести приведенный ниже код для запуска в Teradata.
OPEN OPEN_CUR1;
LOOP
FETCH OPEN_CUR1 INTO ... some variables ...;
EXIT WHEN OPEN_CUR1%NOTFOUND;
CLOSE OPEN_CUR1;
Спасибо
Ответ №1:
Для получения подробной информации об обработке / поведении курсора в Teradata см. Стр. 47 в http://www.info.teradata.com/do_redirect.cfm?itemid=062280010
В основном эквивалентом OPEN_CUR1%NOTFOUND
from Oracle в Teradata является значение, SQLSTATE
равное 7362
и значение SQLCODE
'02000'
… для обработки этого вы можете проверить страницы 49, 76, 192-198, 405 и далее. вышеупомянутого документа.
РЕДАКТИРОВАТЬ — согласно комментарию:
Из примера на стр. 49
CREATE PROCEDURE sp1 (OUT par1 CHARACTER(50))
BEGIN
DECLARE var1 INTEGER;
DECLARE projcursor CURSOR FOR
SELECT projid, projectdesc
FROM project;
OPEN projcursor;
WHILE (SQLCODE = 0)
FETCH projcursor INTO var1, par1;
END WHILE;
FETCH projcursor INTO var1, par1;
CLOSE projcursor;
END;
Они используют WHILE (SQLCODE = 0)
, что означает в основном «пока все в порядке и данные доступны».
Комментарии:
1. Спасибо за быстрый ответ и предоставление документации. Я уже просмотрел документацию, но мне нужен был точный пример того, что может заменить курсор, который не найден. Есть ли какое-либо SQLState, которого будет достаточно?
2. см. Мою ПРАВКУ выше… Я по-прежнему настоятельно рекомендую прочитать разделы о обработчиках SQLSTATE и т. Д.