Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tabela oracle lub widok nie istnieje z wnętrza procedury składowanej

Najprawdopodobniej problem polega na tym, że grant został zrealizowany poprzez rolę. Uprawnienia przyznane użytkownikowi nie są dostępne w procedurze składowanej praw definiującego (domyślnie).

W SQL Developer stosunkowo łatwo jest zweryfikować, czy to jest problem. Jeśli uruchomisz polecenie

SET ROLE none

a następnie uruchom instrukcję SELECT, spodziewałbym się, że otrzymasz ten sam błąd ORA-00942.

Zakładając, że tak jest, rozwiązaniem byłoby zazwyczaj poproszenie właścicieli tabel w schemacie YYY o przyznanie dostępu do tabel bezpośrednio Tobie, zamiast udzielania dostępu za pośrednictwem roli. Poza tym można zdefiniować procedurę składowaną jako procedurę składowaną praw podmiotu wywołującego, dodając do deklaracji AUTHID CURRENT_USER. Oznaczałoby to, że osoba wywołująca procedurę musiałaby mieć dostęp do podstawowych obiektów, ale umożliwiłoby to procedurom korzystanie z uprawnień przyznanych przez rolę.

Jeśli chcesz utworzyć procedurę składowaną praw osoby wywołującej, musisz również odwołać się do nazwy tabeli za pomocą dynamicznego SQL, aby odroczyć sprawdzanie uprawnień do czasu wykonywania. Więc miałbyś coś takiego

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;

jeśli chcesz, aby procedura składowana praw wywołującego przeszukiwała tabelę TableA w schemacie 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. Wybierz pierwszy wiersz każdej grupy w sql

  2. Szybkie partycjonowanie

  3. Jaka jest podwójna tabela w Oracle?

  4. Rekurencja w Oracle

  5. Jak używać Distributed AD, aby skrócić czas instalowania poprawek w Oracle EBS?