sql >> Base de Datos >  >> RDS >> Oracle

dbms_metadata.get_ddl no funciona

Desde el dbms_metadata documentación:

Si a los usuarios sin privilegios se les otorga alguna forma de acceso a un objeto en el esquema de otra persona, podrán recuperar la especificación de concesión a través de la API de metadatos, pero no los metadatos reales del objeto.

Entonces, a menos que esté conectado como un usuario privilegiado, no puede ver el DDL para los objetos de otro usuario. Tendrías que conectarte como SYS , o tener el SELECT_CATALOG_ROLE rol otorgado a su usuario para poder obtener la definición de objeto de XT.

Incluso con ese rol:

En los paquetes de procedimientos almacenados, funciones y derechos de definición, los roles (como SELECT_CATALOG_ROLE) están deshabilitados. Por lo tanto, dicho programa PL/SQL solo puede obtener metadatos para objetos en su propio esquema. Si desea escribir un programa PL/SQL que obtenga metadatos para objetos en un esquema diferente (basado en la posesión de SELECT_CATALOG_ROLE por parte del invocador), debe crear el programa invocadores-derechos.

Si está llamando a dbms_metadata desde un bloque PL/SQL anónimo que no importa, pero si lo llama desde un procedimiento, deberá incluir un AUTHID cláusula en la declaración del procedimiento, agregando AUTHID CURRENT_USER .