Dal dbms_metadata
documentazione:
Se agli utenti non privilegiati viene concessa una qualche forma di accesso a un oggetto nello schema di qualcun altro, saranno in grado di recuperare la specifica della concessione tramite l'API dei metadati, ma non i metadati effettivi dell'oggetto.
Quindi, a meno che tu non sia connesso come utente privilegiato, non puoi vedere il DDL per gli oggetti di un altro utente. Dovresti connetterti come SYS
o avere il SELECT_CATALOG_ROLE
ruolo concesso al tuo utente per poter ottenere la definizione dell'oggetto di XT.
Anche con quel ruolo:
Nelle procedure memorizzate, nelle funzioni e nei pacchetti dei diritti di definizione, i ruoli (come SELECT_CATALOG_ROLE) sono disabilitati. Pertanto, un tale programma PL/SQL può recuperare solo i metadati per gli oggetti nel proprio schema. Se si desidera scrivere un programma PL/SQL che prelevi i metadati per gli oggetti in uno schema diverso (in base al possesso di SELECT_CATALOG_ROLE da parte dell'invocatore), è necessario impostare i diritti per gli invocatori del programma.
Se stai chiamando dbms_metadata
da un blocco PL/SQL anonimo che non importa, ma se lo chiami da una procedura dovrai includere un AUTHID
clausola nella dichiarazione della procedura, aggiungendo AUTHID CURRENT_USER
.