Oracle
 sql >> Datenbank >  >> RDS >> Oracle

dbms_metadata.get_ddl funktioniert nicht

Aus den dbms_metadata Dokumentation:

Wenn nicht privilegierten Benutzern irgendeine Form von Zugriff auf ein Objekt im Schema einer anderen Person gewährt wird, können sie die Berechtigungsspezifikation über die Metadaten-API abrufen, jedoch nicht die eigentlichen Metadaten des Objekts.

Wenn Sie also nicht als privilegierter Benutzer verbunden sind, können Sie die DDL für die Objekte eines anderen Benutzers nicht sehen. Sie müssten sich als SYS verbinden , oder haben die SELECT_CATALOG_ROLE Rolle, die Ihrem Benutzer gewährt wurde, um die Objektdefinition von XT abzurufen.

Auch mit dieser Rolle:

In gespeicherten Prozeduren, Funktionen und Definierer-Rechtepaketen sind Rollen (wie SELECT_CATALOG_ROLE) deaktiviert. Daher kann ein solches PL/SQL-Programm nur Metadaten für Objekte in seinem eigenen Schema abrufen. Wenn Sie ein PL/SQL-Programm schreiben möchten, das Metadaten für Objekte in einem anderen Schema abruft (basierend auf dem Besitz von SELECT_CATALOG_ROLE durch den Aufrufer), müssen Sie dem Programm Aufruferrechte geben.

Wenn Sie dbms_metadata aufrufen von einem anonymen PL/SQL-Block, das spielt keine Rolle, aber wenn Sie es von einer Prozedur aus aufrufen, müssen Sie eine AUTHID einfügen -Klausel in der Prozedurdeklaration, indem AUTHID CURRENT_USER hinzugefügt wird .