Gabriel,

 

Tente o seguinte:

 

 

Declare

     Vsql varchar2(2000) :=’’;

Begin

     Vsql := fn_compara;

    Execute immediate vsql;

End;

 

Se ao invés de vc retornar um clob, retornar um varchar2, ajuda.

 

Abs,

 

 

 

Carlos Martello

DBA Oracle / Consultor de Tecnologia

TEL:  55+21+3094-6250

Choice Technologies S/A - Inteligência em Energia

e-mail: [EMAIL PROTECTED]

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Gabriel Herdt
Enviada em: segunda-feira, 17 de novembro de 2008 16:49
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Ajuda em procedure[URGENTE]

 

Pessoal como executar o resultado de DBMS_METADATA.get_ddl(...) em 
uma Function? Segue abaixo minmha Function

FUNCTION FN_COMPARA (
pr_usera IN VARCHAR2,
pr_userb IN VARCHAR2,
pr_erro OUT VARCHAR2
)
RETURN VARCHAR2
IS
vtable_name VARCHAR2 (30);
DDL CLOB;
i INTEGER;
a INTEGER;
x INTEGER;
--get dbms_metadata.get_ddl
(object_type,name,schema,version,model,transform);
-- variable_name datatype;
BEGIN
vtable_name := '';
i := 0;
x := 0;
-- grant select on all_tables to TCCB;

FOR tabela IN (SELECT table_name
FROM all_tables
WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB'))
AND table_name NOT IN (SELECT table_name
FROM all_tables
WHERE owner = 'TCCB'))
LOOP
vtable_name := tabela.Table_name;

DDL := DBMS_METADATA.get_ddl ('TABLE', vtable_name, pr_usera);
EXECUTE IMMEDIATE TO_CHAR (DDL);

COMMIT;
END LOOP;

RETURN TO_CHAR (DDL);
EXCEPTION
WHEN OTHERS
THEN
pr_erro := ('Erro: ' ||pr_erro||SQLERRM);
END;

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a