Boa tarde,
Estou utilizando a estrutura abaixo composta por uma procedure e função e ao chamar a função pela procedure é exibida a mensagem abaixo:
FUNÇÃO:
create or replace function carga_1
(
vnome in varchar2
)
return varchar2
is
linha_comando varchar2(600);
begin
–LINESIZE 132 PAGESIZE 0 FEEDBACK off VERIFY off TRIMSPOOL on LONG 1000000 COLUMN ddl_string FORMAT A100 WORD_WRAP;
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,’STORAGE’,false);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,’PRETTY’,true);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,’SQLTERMINATOR’,true);
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,’REF_CONSTRAINTS’,false);
select DBMS_METADATA.GET_GRANTED_DDL(‘SYSTEM_GRANT’,vnome) into linha_comando
from dual;
return(linha_comando);
end;
PROCEDURE:
create or replace procedure permissoes_usuarios
is
lnX integer :=0;
lcNome varchar2(50) :=null;
Cursor usuarios is
select s.username
from dba_users s
where s.username not in (select r.username
from nao_importar_usuarios2 r)
order by s.username;
begin
for lnX in usuarios loop
begin
lcNome := lnX.username;
insert into permissoes_por_usuarios(linha)
values(CARGA_1(lcNome));
commit;
end;
end loop;
end permissoes_usuarios;
Mensagem de erro:
ORA-31608: specified object of type SYSTEM_GRANT not found
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 86
ORA-06512: at “SYS.DBMS_METADATA”, line 645
ORA-06512: at “SYS.DBMS_METADATA”, line 1364
ORA-06512: at line 1
Alguém tem alguma idéia pois parece que o SYSTEM_GRANT não aceita variável como parâmetro e o mais interessante é que se executar a função passando o parâmetro funciona, chamando pela procedure não.
Obrigado.
Airton