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

dbms_metadata.get_ddl nie działa

Z dbms_metadata dokumentacja:

Jeśli nieuprzywilejowani użytkownicy otrzymają jakąś formę dostępu do obiektu w schemacie innej osoby, będą mogli pobrać specyfikację przyznania przez interfejs Metadata API, ale nie rzeczywiste metadane obiektu.

Więc jeśli nie jesteś połączony jako uprzywilejowany użytkownik, nie możesz zobaczyć DDL dla obiektów innego użytkownika. Musisz połączyć się jako SYS lub mieć SELECT_CATALOG_ROLE rola przyznana Twojemu użytkownikowi, aby móc pobrać definicję obiektu XT.

Nawet w tej roli:

W procedurach składowanych, funkcjach i pakietach praw definiujących role (takie jak SELECT_CATALOG_ROLE) są wyłączone. Dlatego taki program PL/SQL może pobierać tylko metadane dla obiektów we własnym schemacie. Jeśli chcesz napisać program PL/SQL, który pobiera metadane dla obiektów w innym schemacie (w oparciu o posiadanie SELECT_CATALOG_ROLE przez osobę wywołującą), musisz nadać programowi prawa wywołujące.

Jeśli dzwonisz do dbms_metadata z anonimowego bloku PL/SQL, który nie ma znaczenia, ale jeśli wywołujesz go z procedury, będziesz musiał dołączyć AUTHID klauzula w deklaracji procedury, dodając AUTHID CURRENT_USER .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna automatycznego przyrostu — sekwencja jako wartość domyślna w Oracle

  2. Konwertuj ciąg znaków oddzielonych przecinkami na tablicę w PL/SQL

  3. Jak wyświetlić typ zmiennej w PL/SQL?

  4. Jak rozwiązać brakujące wyrażenie ORA-00936

  5. INSTR() Funkcja w Oracle