2011-12-22 19 views
6

Istnieją dwa schematy w bazie danych Oracle.Pomijanie "tabela lub widok nie istnieje" w kompilacji pakietów

MYSCHEMA który jest kontrolowany przeze mnie.

OTHERSCHEMA który nie jest kontrolowany przeze mnie.

Po prostu wiem, że mogę uzyskać wynik z select * from OTHERSCHEMA.OTHEROBJECT. Jednak OTHEROBJECT jest synonimem synonimem.

W moim pakiecie, mam oświadczenie jak

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

Ale to dało mi Table or view does not exist.

Jak mogę rozwiązać lub obejścia tego problemu? Dzięki!

+0

Jesteś zalogowany do 'MYSCHEMA' i uruchom' select * from OTHERSCHEMA.OTHEROBJECT' i to działa? Twój pakiet jest skompilowany pod 'MYSCHEMA'? Czy próbowałeś uruchomić instrukcję insert poza pakietem jako samodzielną instrukcję - czy to działa? –

Odpowiedz

11

Zakładam, że otrzymał przywilej, aby wybrać spośród otherschema.otherobject za pomocą roli jak opposted do dotacji bezpośredniej (takich jak grant all on otherschema.otherobject to myschema). W takim przypadku uprawnienia w ramach tej roli nie zostaną wykorzystane do określenia, jakie prawa masz w bloku PL/SQL.

Zobacz także How Roles Work in PL/SQL Blocks (Oracle Docu, gdzie jest napisane pod Roles stosowanych w nazwanych bloków z Prawa Definer za:

Wszystkie role są wyłączone w dowolnej nazwie PL/SQL bloku (procedura przechowywana, funkcja lub wyzwalania), który wykonuje praw Definer za. role nie są wykorzystywane do sprawdzania przywileju i nie można ustawić ról w procedurze praw ustalający użytkownika).