Компиляция хранимой процедуры
Определение оператора компиляции существующей хранимой процедуры.
Спецификация
< компиляция хранимой процедуры >
::=
REBUILD PROCEDURE [имя схемы.]имя хранимой процедуры
Синтаксические правила
-
< Имя хранимой процедуры >
должно ссылаться на существующую в БД хранимую процедуру.
Общие правила
-
Необходимость в перекомпиляции хранимой процедуры возникает в случае, если процедура использует претранслированные запросы, а указанные в них таблицы были пересозданы или изменена их структура.
-
Команда доступна только владельцу процедуры.
-
Для выполнения команды надо иметь привилегию
RESOURCE
.
Пример
grant resource to U1 identified by '12345678'; grant resource to U2 identified by '12345678'; username U1/12345678 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/12345678 create or replace table test (i int); insert into test values (1); ! Тоже должно быть 2 execute u1.cnt(); username U1/12345678 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/12345678 ! Команда не доступна (выполняет не владелец процедуры) rebuild procedure u1.cnt; ! Должно быть NULL – таблица изменена execute u1.cnt(); username U1/12345678 rebuild procedure u1.cnt; ! Должно быть 3 execute cnt(); username U2/12345678 ! Должно быть 3 execute u1.cnt(); username SYSTEM/MANAGER8 drop user u1 cascade; drop user u2 cascade;