Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

dbms_metadata.get_ddl não está funcionando


Do dbms_metadata documentação:

Se os usuários sem privilégios receberem alguma forma de acesso a um objeto no esquema de outra pessoa, eles poderão recuperar a especificação de concessão por meio da API de metadados, mas não os metadados reais do objeto.

Portanto, a menos que você esteja conectado como um usuário privilegiado, não poderá ver o DDL dos objetos de outro usuário. Você precisaria se conectar como SYS , ou tenha o SELECT_CATALOG_ROLE role concedido ao seu usuário para poder obter a definição de objeto do XT.

Mesmo com esse papel:

Em procedimentos armazenados, funções e pacotes de direitos de definição, as funções (como SELECT_CATALOG_ROLE) são desabilitadas. Portanto, esse programa PL/SQL só pode buscar metadados para objetos em seu próprio esquema. Se você quiser escrever um programa PL/SQL que busque metadados para objetos em um esquema diferente (com base na posse de SELECT_CATALOG_ROLE do invocador), você deve criar o programa invokers-rights.

Se você estiver chamando dbms_metadata de um bloco PL/SQL anônimo que não importa, mas se você estiver chamando de um procedimento, você terá que incluir um AUTHID cláusula na declaração do procedimento, adicionando AUTHID CURRENT_USER .