Oracle
 sql >> база данни >  >> RDS >> Oracle

таблица или изглед на oracle не съществуват от вътрешната съхранена процедура

Най-вероятно проблемът е, че грантът е направен чрез роля. Привилегиите, предоставени на потребител, не са налични в съхранената процедура за права на дефинира (по подразбиране).

В SQL Developer е сравнително лесно да се провери дали това е проблемът. Ако изпълните командата

SET ROLE none

и след това изпълнете оператора SELECT, очаквам да получите същата грешка ORA-00942.

Ако приемем, че случаят е такъв, решението обикновено би било да поискате от собствениците на таблиците в схемата YYY да предоставят достъп до таблиците директно на вас, вместо да предоставят достъп чрез роля. Освен това, можете да дефинирате вашата съхранена процедура като съхранена процедура с права на извикващия, като добавите AUTHID CURRENT_USER към декларацията. Това означава, че извикващият процедурата ще трябва да има достъп до основните обекти, но ще позволи на вашите процедури да използват привилегиите, предоставени чрез роля.

Ако искате да създадете съхранена процедура за правата на извикващия, ще трябва също да се обърнете към името на таблицата, използвайки динамичен SQL, за да отложите проверката на привилегиите до време на изпълнение. Така че ще имате нещо като

CREATE OR REPLACE PROCEDURE PRC_SOMESP 
  AUTHID CURRENT_USER
AS 
  l_cnt pls_integer;
BEGIN
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM yyy.TableA' INTO l_cnt;
END PRC_SOMESP;

ако искате съхранена процедура с правата на извикващия, която е поискала таблицата TableA в схема XXX.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да махна ограничение, което не е нула в Oracle, когато не знам името на ограничението?

  2. разлика между план за обяснение и план за изпълнение

  3. Как да напиша скрипт за вмъкване на оракул с едно поле като CLOB?

  4. Регистрирайте изхода на DBMS_OUTPUT.Put_Line в таблица в Oracle с DBMS_OUTPUT.Get_Lines

  5. Какво представляват PLSQL записи в Oracle