Исключение PLS-00201 мне кажется немного необычным из-за проблемы «привилегии, предоставленные ролью, недоступной в хранимой процедуре». Как уже отмечали Стив Броберг и Кхб, предоставление привилегий напрямую пользователю разрешит исключение
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