Исключение PLS-00201 для меня несколько необычно, поскольку проблема «привилегии, предоставленные через роль, недоступную в хранимой процедуре». Как Стив Broberg и ХО уже отмечалось, предоставление привилегий непосредственно пользователю рассосется за исключением
ORA-00942: table or view does not exist.
(Это исключение, которое я обычно вижу при компиляции хранимой процедуры, когда оператор работает за пределами хранимой процедуры, и я считаю, что льготы предоставляются через роль.)
что своеобразное, что исключение вы видите является PLS-00201 (что меня озадачили.)
Еще один обходной к ORA-942 «нет привилегий через роль» проблема заключается в определении процедуры с правами инициатора и использовать динамический SQL:
create procedure foo authid current_user
is
ln_cnt number;
begin
execute immediate 'select cnt(1) from schema.view' into ln_cnt;
end;
/
Я не думаю, что это лучший подход (он имеет свой собственный вопросы), но это обходное решение.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm
Благодарим за быстрый ответ. – Sam