Создание (модификация) хранимой процедуры (триггера)

Назначение

Создание в БД новой хранимой процедуры (триггера) или модификация текста существующей хранимой процедуры (триггера).

Параметры вызова

inter(CBL, NULL, OpBuf, [CondBuf], NULL);

Входные данные

Входными данными являются:

  • контрольный блок CBL;

  • буфер оператора OpBuf.

В контрольном блоке должны быть заполнены поля:

Имя поля Значение
NumChan Номер канала
Command 4 пробела
Node Имя ЛИНТЕР-сервера

Буфер оператора OpBuf должен содержать SQL-выражение создания или модификации хранимой процедуры либо триггера.

Выходные данные

Выходными данными является контрольный блок CBL.

В нем будут возвращены:

Имя поля Значение
CodErr Код завершения запроса к СУБД ЛИНТЕР
SysErr Код состояния ОС

Описание

Для выполнения команды в БД должны быть соответствующие системные таблицы (см. документ «СУБД ЛИНТЕР. Создание и конфигурирование базы данных», пункт «Создание БД»).

Исходный текст процедуры сохраняется в БД перед каждой трансляцией процедуры (исходный код триггера записывается только при отсутствии ошибок трансляции), оттранслированный код – только при отсутствии ошибок трансляции, поэтому при первой трансляции процедуры (триггера) необходимо использовать SQL-оператор CREATE PROCEDURE…, при всех последующих трансляциях – ALTER PROCEDURE….

Поле NumChan блока CBL должно ссылаться на открытый канал.

Максимальная длина тела процедуры (триггера) 64 Кбайта.

Если процедура (триггер) оттранслирована без ошибок и в БД нет процедуры (триггера) с аналогичным именем, то она сохраняется в БД.

Владельцем созданной процедуры (триггера) является пользователь, создавший процедуру (триггер).

Право на модификацию процедуры имеет только ее владелец.

Если в момент модификации процедуры она используется некоторыми другими приложениями, то может возникнуть рассогласование кода оттранслированной процедуры (часть кода была выполнена из старой версии, а часть кода будет выполнена уже из новой версии процедуры).

В любой момент времени может транслироваться только одна процедура (триггер), поэтому, если одновременно поступило несколько команд на трансляцию, то они выполнятся в порядке очередности.

Если в момент трансляции процедуры (триггера) осуществляется аварийное закрытие канала (команда KILL), то результаты трансляции будут непредсказуемы.

Коды завершения

Код Описание
NORMAL Нормальное завершение
Proc_Translation_Error Ошибка трансляции процедуры (триггера)
Proc_Table_Is_Absent Таблица процедур $$$PROC отсутствует в БД
Trigger_Table_Is_Absent Таблица триггеров $$$TRIG отсутствует в БД
ERRPASSWORD Нарушение привилегий
NOTSP Транслятор хранимых процедур не активен или в данный момент занят трансляцией другой процедуры

Пример работы с хранимой процедурой

См. приложение 12.