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
.