Динамическое Изготовление Операторов SQL. Курсоры.
Динамическое Изготовление Операторов SQL. Курсоры.
Операторы PREPARE и EXECUTE предназначены для динамического (во время выполнения программы) изготовления и выполнения операторов языка SQL (не 4GL !!!).
В приведенном ниже фрагменте в ответ на запрос пользователь сможет ввести с клавиатуры строку с оператором языка SQL (Пусть, например, он введет строку: DROP DATABASE buhgalteriq). Программа изготовит из этой строки настоящий оператор и выполнит его с помощью оператора EXECUTE. Если при выполнении зарегистрирована ошибка, о чем сообщит установленный в отрицательное значение код завершения status, пользователя снова попросят ввести оператор. DEFINE stroka char(200)
MAIN . . . LABEL METK2:PROMPT "введите оператор языка SQL: " FOR stroka
WHENEVER ERROR CONTINUE # Включить режим "В случае # ошибки продолжить выполнение # программы"
PREPARE st1 FROM stroka # Изготовить оператор из # символьной строки EXECUTE st1 # Выполнить изготовленный оператор IF status<0 THEN ERROR "ошибка номер ", status, " в вашем операторе" GOTO metk2 END IF
WHENEVER ERROR STOP # Восстановить режим # "В случае ошибки прервать # выполнение программы" . . . END MAIN
В системную переменную status помещается код выполнения каждого оператора 4GL (status=0 если все нормально, status<0 если произошла ошибка). Переменная status может проверяться после любого оператора программы и в зависимости от ее значения могут предприниматься какие-либо действия.