Есть у меня две схемы user_a и user_b. В user_a есть пакет user_a.ope_util. Так же есть роль role_read которая имеет привелегию execute user_a.ope_util, и назначена эта роль user_b.
Затем я создаю у user_b синоним на пакет user_a.ope_util. В результате запросы от user_b типа:
select ope_util.exist_index('dsd') from dual;
CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
l_var NUMBER;
BEGIN
select ope_util.exist_index('dsd') into l_var from dual;
END PROCEDURE1;
/
нормально выполняются, а вот процедура
CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
l_var NUMBER;
BEGIN
select ope_util.exist_index('dsd') into l_var from dual;
if ope_util.exist_index('ddd') = 0 then --на эту строку ошибка
null;
end if;
END PROCEDURE1;
Не компилиться с ошибкой на выделенной строке:
PROCEDURE USER_B.PROCEDURE1@user_b
Error(6,3): PL/SQL: Statement ignored
Error(6,6): PLS-00201: identifier 'OPE_UTIL' must be declared
Почему такое использование не проходит? Такая же ситация и с любой процедурой и функциями. Т.е. в запросах выполняется, а в Pl/SQL коде — нет.
Спасибо за внимание.
begin
if ope_util.exist_index('ddd') = 0 then
null;
end if;
end;
такой код тоже работает без ошибок