Обходная таблица или представление не существует в компиляции пакета

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

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

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

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

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

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

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

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


person Alex Yeung    schedule 22.12.2011    source источник
comment
Вы вошли в MYSCHEMA и запустили select * from OTHERSCHEMA.OTHEROBJECT, и это работает? Ваш пакет скомпилирован под MYSCHEMA? Вы пытались запустить оператор вставки вне пакета как отдельный оператор - это работает?   -  person John Doyle    schedule 22.12.2011


Ответы (1)


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

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

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

person René Nyffenegger    schedule 22.12.2011