Обход "таблица или представление не существует" при компиляции пакета - PullRequest
6 голосов
/ 22 декабря 2011

В базе данных Oracle есть две схемы.

MYSCHEMA, который контролируется мной.

OTHERSCHEMA, который я не контролирую.

Я просто знаю, что могу получить результат от select * from OTHERSCHEMA.OTHEROBJECT. Однако OTHEROBJECT является синонимом .

В моем пакете есть утверждение типа

insert into MYSCHEMA.MYTABLE(COL1) select COL1 from OTHERSCHEMA.OTHEROBJECT;

Но это дало мне Table or view does not exist.

Как я могу решить или обойти эту проблему? Спасибо!

1 Ответ

11 голосов
/ 22 декабря 2011

Я предполагаю, что вы получили право выбирать из otherschema.otherobject с помощью роли в противоположность прямому гранту (например, grant all on otherschema.otherobject to myschema).В этом случае привилегии в этой роли не будут использоваться для определения того, какие права у вас есть в блоке PL / SQL.

См. Также Как работают роли в блоках PL / SQL (Oracle Docu, где сказано: Роли, используемые в именованных блоках с правами определителя :

Все роли отключены в любом именованном блоке PL / SQL (хранимая процедура, функция илитриггер), который выполняется с правами определителя. Роли не используются для проверки привилегий, и вы не можете устанавливать роли в процедуре определения прав.)

...