Создание (модификация) хранимой процедуры (триггера)
Назначение
Создание в БД новой хранимой процедуры (триггера) или модификация текста существующей хранимой процедуры (триггера).
Параметры вызова
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.