Компиляция хранимой процедуры
Определение оператора компиляции существующей хранимой процедуры.
Спецификация
<компиляция хранимой процедуры>
::=
REBUILD PROCEDURE [имя схемы.]имя хранимой процедуры
Синтаксические правила
-
<Имя хранимой процедуры>
должно ссылаться на существующую в БД хранимую процедуру.
Общие правила
-
Необходимость в перекомпиляции хранимой процедуры возникает в случае, если процедура использует претранслированные запросы, а указанные в них таблицы были пересозданы или изменена их структура.
-
Команда доступна только владельцу процедуры.
-
Для выполнения команды надо иметь привилегию
RESOURCE
.
Пример
grant resource to U1; grant resource to U2; username U1/ create or replace table test (i int); insert into test values (1); insert into test values (2); create or replace procedure cnt() result int declare var a cursor(i int); // code open a for "select count(*) from test;"; // return a.i; // end; ! Должно быть 2 execute cnt(); grant execute on cnt to U2; grant select on test to U2; username U2/ create or replace table test (i int); insert into test values (1); ! Тоже должно быть 2 execute u1.cnt(); username U1/ drop table test; create table test(i int, k int); insert into test values (1,1); insert into test values (2,2); insert into test values (3,3); ! Должно быть NULL – таблица изменена execute cnt(); grant select on test to U2; username U2/ ! Команда не доступна (выполняет не владелец процедуры) rebuild procedure u1.cnt; ! Должно быть NULL – таблица изменена execute u1.cnt(); username U1/ rebuild procedure u1.cnt; ! Должно быть 3 execute cnt(); username U2/ ! Должно быть 3 execute u1.cnt(); username SYSTEM/MANAGER drop user u1 cascade; drop user u2 cascade;