2009-06-09 2 views
1

Попытка запустить некоторый sql в процедуре pl/sql.Идентификатор Oracle 'myschema.mytable должен быть объявлен'

Выберите поле из schema.view;

Я получаю ошибку компиляции

Ошибка (22,18): PLS-00201: идентификатор «schema.view» должен быть объявлен

Из ошибок, кажется, что мой пользователь не имеет доступа к столу. Я могу запустить тот же оператор в окне запроса.

Есть ли разрешение, которое мне необходимо предоставить?

Спасибо!

ответ

4

Необходимо предоставить пользователю права на явное разрешение процедуры на таблицу/представление. Предоставление этого через роль не будет работать.

С уважением K

+0

Благодарим за быстрый ответ. – Sam

2

Да. Oracle не рассматривает разрешения, которые у вас есть из членства в ролях, когда вы выполняете процедуры, поэтому вполне вероятно, что пользователю, которому принадлежит эта процедура, был предоставлен доступ к schema.view через роль. Вам необходимо явно предоставить разрешения для этого объекта владельцу процедуры.

+0

Очень ценим! – Sam

1

Исключение 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

Смежные вопросы