Oracle
 sql >> Base de données >  >> RDS >> Oracle

dbms_metadata.get_ddl ne fonctionne pas

À partir de dbms_metadata documents :

Si des utilisateurs non privilégiés se voient accorder une certaine forme d'accès à un objet dans le schéma de quelqu'un d'autre, ils pourront récupérer la spécification d'octroi via l'API de métadonnées, mais pas les métadonnées réelles de l'objet.

Ainsi, à moins que vous ne soyez connecté en tant qu'utilisateur privilégié, vous ne pouvez pas voir le DDL des objets d'un autre utilisateur. Vous auriez besoin de vous connecter en tant que SYS , ou avoir le SELECT_CATALOG_ROLE rôle accordé à votre utilisateur pour pouvoir obtenir la définition d'objet de XT.

Même avec ce rôle :

Dans les procédures stockées, les fonctions et les packages de droits définisseurs, les rôles (tels que SELECT_CATALOG_ROLE) sont désactivés. Par conséquent, un tel programme PL/SQL ne peut récupérer que les métadonnées des objets de son propre schéma. Si vous souhaitez écrire un programme PL/SQL qui récupère les métadonnées des objets dans un schéma différent (basé sur la possession par l'invocateur de SELECT_CATALOG_ROLE), vous devez donner au programme les droits d'invocateur.

Si vous appelez dbms_metadata à partir d'un bloc PL/SQL anonyme qui n'a pas d'importance, mais si vous l'appelez à partir d'une procédure, vous devrez inclure un AUTHID clause dans la déclaration de la procédure, en ajoutant AUTHID CURRENT_USER .