Создание/модификация процедуры

Назначение

Создание/модификация хранимой процедуры.

Синтаксис

   
< создание хранимой процедуры >::=
EXEC SQL CREATE PROCEDURE < процедурный блок >;
END-EXEC;

< модификация хранимой процедуры >::=
EXEC SQL ALTER PROCEDURE  < процедурный блок >;
END-EXEC;

Структура < процедурного блока > подробно рассмотрена в документе «СУБД ЛИНТЕР. Процедурный язык».

Описание

  1. Обработка этого оператора прекомпилятором производится по-разному при включенной и выключенной проверке семантики предложений встроенного языка (опция -S прекомпилятора). Если проверка семантики выключена, текст процедуры будет включен в претранслированный текст программы, и во время исполнения процедура будет создана (модифицирована). Если проверка семантики включена, оператор вызовет компилятор хранимых процедур spc, который создаст новую или модифицирует ранее созданную процедуру. Если при создании (модификации) процедуры возникает ошибка, создается файл-листинг с именем, совпадающим с именем процедуры, и расширением .lsr. Если была допущена синтаксическая ошибка в имени хранимой процедуры, создается файл-листинг с именем – порядковым номером процедуры в текущем компилируемом модуле. Этот файл содержит текст процедуры с расшифровкой ошибок.

  2. Если проверка семантики включена (-S), должны быть указаны ЛИНТЕР-сервер, пользователь (которому будет принадлежать созданная процедура) и пароль пользователя. Если указаны несуществующий сервер, неверный пользователь или неверный пароль пользователя, то листинг будет содержать расшифровку ошибок работы с ЛИНТЕР-сервером.

  3. В результате исполнения оператора прекомпилятор создает описание хранимой процедуры аналогично тому, как это происходит при обработке предложения DECLARE PROCEDURE встроенного языка.

  4. Если претрансляция производится при включенной проверке семантики, должно быть указано < имя схемы >, в которой была создана процедура. Т.е. в операторе EXECUTE PROCEDURE нужно явно указать имя схемы, в которой была создана процедура, иначе будет выдана ошибка E_UNKNAME «Неопределенное имя».

Пример

(прекомпилятор вызывается с опцией -U USR1/Pass)

EXEC SQL CREATE PROCEDURE EX() RESULT INT
CODE
END;
END-EXEC;
...
EXEC SQL EXECUTE PROCEDURE USR1.EX();