Глава 25. Использование SQL с другими языками программирования
ЕХЕС SQL WHENEVER NOT FOUND CONTINUE;
SQLERROR - один из способов выразить SQLCODE <О; NOT FOUND - один из способов выразить SQLCODE = 100. (В некоторых программных продуктах для обо значения последней ситуации можно использовать SQLWARNING.) Error_handler -
это имя места в программе, начиная с которого продолжается выполнение программы
в том случае, если обнаружена ошибка (GOTO можно записать как одно слово или как два слова). Это имя определяется в зависимости от конкретного включающего языка, оно может быть меткой (label) в Pascal, именем секции или именем параграфа в COBOL (здесь и далее будет использоваться термин "метка"). Наиболее предпочти тельным может быть указание предлагаемой разработчиками системы стандартной процедуры, которая предназначена для обработки ошибочных ситуаций и может быть
включена во все программы.
CONTINUE означает, что не требуется предпринимать никаких специальных дей ствий для обработки значения SQLCODE. Это значение принимается по умолчанию, если не используется команда WHENEVER для определения значения SQLCODE.
Многократно размещая такие предложения по тексту программы, можно предприни
мать какие-либо действия в программе или не предпринимать их.
Например, если программа включает серию команд INSERT, использующих запро сы, которые реально выдают значения, можно напечатать специальное сообщение или
сделать что-то, что дает возможность определить, какие из запросов возвращают пус
тые значения, и вставки значений не происходит. В этом случае можно ввести следую
щее:
ЕХЕС SQL WHENEVER NOT FOUND GOTO No_rows;
No_rows - это метка кода, выполняющего соответствующее действие. Если далее
в этой программе выполняется извлечение данных, то можно ввести следующее
ЕХЕС SQL WHENEVER NOT FOUND CONTINUE;
поскольку повторное извлечение данных во время извлечения строк является
нормальной процедурой и не требует специального управления.
Обновление курсоров
Курсоры применяются для выбора из таблицы групп строк, которые можно обно вить или удалить по одной. Это дает возможность сформулировать ряд ограничений
на предикаты, используемые в командах UPDATE и DELETE. Можно сослаться на ра
бочую таблицу, для которой сформулирован предикат запроса курсора или подзапро сы этого запроса, чего нельзя сделать в самих предикатах этих команд. Стандарт SQL не позволяет воспользоваться следующей формой записи для удаления всех покупате
лей с рейтингами ниже среднего:
ЕХЕС SQL DELETE FROM Customers