Oracle
 sql >> Database >  >> RDS >> Oracle

dbms_metadata.get_ddl non funziona

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 .