Доступные версии документации

Выполнение хранимой процедуры

Определение оператора выполнения хранимой процедуры.

Спецификация

   
<выполнение хранимой процедуры>::=

Синтаксические правила

  1. Оператор используется для вызова хранимой процедуры внутри другого объекта процедурного языка (хранимой процедуры, триггера или временной процедуры).

  2. <Параметр> представляет собой совокупность литералов и/или значений параметров, разделенных запятой.

    create or replace procedure test (in i int) result int code return i; end;
    !Недопустимая конструкция
    execute test(1+2);
  3. При наличии у параметров опции DEFAULT, они могут опускаться, в этом случае поле ввода параметра необходимо оставить пустым и ввод следующего параметра выполнить после запятой.

    create procedure test_proc (in k int, in m int DEFAULT 2, in n int) ...
    call test_proc(1,,3);
  4. Для передачи логических значений параметров используются целые числа (0 интерпретируется как FALSE, 1 – как TRUE) или символьные литералы 'true' и 'false' (в любом регистре).

  5. В рамках одной транзакции первая запущенная процедура для выполнения оператора EXECUTE открывает от основного канала свой дочерний канал. Все последующие процедуры, вызываемые в рамках той же транзакции, переиспользуют тот же самый канал, не открывая новых. Поэтому COMMIT/ROLLBACK в процедуре влияет не только на изменения, сделанные данной процедурой, но и на все изменения, сделанные всеми вызванными ранее процедурами. Чтобы избежать этого, процедура должна использовать точку сохранения (SAVEPOINT), установив ее в начале транзакции, и подавать команды COMMIT/ROLLBACK до нее.

    Примечание

    Поскольку триггеры работают точно так же, как процедуры, все, сказанное для процедур, верно и для триггеров. Кроме того, поскольку все изменения производятся триггерами по одному общему каналу, то в случае нарушения логики работы, обнаруженного триггером, он может подать ROLLBACK, откатывающий изменения всех вызванных ранее триггеров и обеспечивающий целостность в рамках запроса.

  6. Для выполнения чужой процедуры необходимо явно указывать <имя схемы> и иметь соответствующее право на вызов процедуры, назначенное владельцем процедуры.

  7. Если опция AS OWNER не задана, то вызывающему пользователю должна быть назначена привилегия EXECUTE на данную процедуру и обращение к таблицам внутри тела процедуры будет выполняться от имени вызывающего пользователя и соответственно у вызывающего пользователя должны быть назначены соответствующие привилегии на таблицы.

  8. Если опция AS OWNER задана, то вызывающему пользователю должна быть назначена привилегия EXECUTE AS OWNER на данную процедуру и обращение к таблицам будет выполняться от имени владельца процедуры и права доступа к таблицам, используемым в процедуре, не требуются.

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter