Oracle Enterprise 11.2.0.3
estou recebendo:
ORA-31603: object "string of type "string" not found in schema "string"
ao executar uma função que chama dbms_metadata.get_ddl.
Eu sei que procedimentos/funções precisam ter as permissões concedidas explicitamente em vez de por meio de uma função: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1065832643319
Também sei que as permissões necessárias para executar dbms_metadata.get_ddl estão na função SELECT_CATALOG_ROLE: https://sshailesh.wordpress.com/2010/05/08/dbms_metadata-get_ddl-avoid-ora-31603-error-by-using- select_catalog_role/
No entanto, a função SELECT_CATALOG_ROLE contém mais de 2.400 permissões. Então, quais são as permissões explícitas necessárias para executar dbms_metadata.get_ddl para que eu possa chamá-lo de uma função?
Caso de teste:
create or replace function getddl (p_type varchar2, p_object varchar2, p_owner varchar2)
return varchar2 as
begin
return dbms_metadata.get_ddl(p_type, p_object, p_owner);
end getddl;
create table utilities.mytable (mycol varchar2(1));
select dbms_metadata.get_ddl('TABLE', 'MYTABLE', 'UTILITIES') from dual;
<DDL>
select getddl('TABLE', 'MYTABLE', 'UTILITIES') from dual;
ORA-31603: object "MYTABLE" of type TABLE not found in schema "UTILITIES"
EDITAR
Até agora, concedi explicitamente o seguinte ao usuário que possui getddl():
select any table
select any dictionary
Com base no comentário de Raj, o seguinte funciona:
Por favor, verifique docs.oracle.com/database/121/ARPLS/d_metada.htm#ARPLS66868, especialmente parte sobre os direitos dos invocadores (adicionado como uma resposta).