Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato.
PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo <[EMAIL PROTECTED]> escreveu > > Pessoal, > > Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler "pedaços" de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. > Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. > Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito "elegante" utilizar parâmetros de OUT em uma function. > > > Att, > Wellerson > > "Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar..." > (Legião Urbana) > > > "As idéias estão no chão, você tropeça e acha a solução..." > (Titãs) > > > > > ________________________________ > De: Carlos martello <[EMAIL PROTECTED]> > Para: oracle_br@yahoogrupos.com.br > Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 > Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] > > > Ah sim..... > > Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas "particularidades" . > > Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). > > Assim que algum dos dois encontrar a "fórmula" encaminhamos, beleza? > > Carlos Martello > > DBA Oracle / Consultor de Tecnologia > > TEL: 55+21+3094-6250 > > Choice Technologies S/A - Inteligência em Energia > > e-mail: carlosmartello@ choice.com. br > > De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt > Enviada em: quarta-feira, 19 de novembro de 2008 15:17 > Para: [EMAIL PROTECTED] os.com.br > Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] > > Eu não consigo passar o resultado do Get_dll para uma variavel e > executar o conteudo dessa variavel. Tem outra forma de executar o > Resultado do GET_DDL? > > --- Em [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> , "Carlos Eduardo P. Martello" > <carlos.martello@ ...> escreveu > > > > Gabriel, até vi agora de uma forma mais atenta que vc já faz o > execute > > immediate dentro da função..... > > > > > > > > Não entendi o que você quer então.... > > > > > > > > É o execute immediate que não está funcionando? > > > > > > > > > > > > Abs, > > > > > > > > > > > > > > > > Carlos Martello > > > > DBA Oracle / Consultor de Tecnologia > > > > TEL: 55+21+3094-6250 > > > > Choice Technologies S/A - Inteligência em Energia > > > > e-mail: carlosmartello@ ... > > > > > > > > De: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> > [mailto:[EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> ] Em > > nome de Gabriel Herdt > > Enviada em: terça-feira, 18 de novembro de 2008 22:33 > > Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> > > Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] > > > > > > > > assim obrigado vou tentar, maas eu quero executar p dll gerado pela > > funcao. pode me dizer como? > > --- Em [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> <mailto:oracle_ br% > 40yahoogrupos. com.br> > > , "Carlos Eduardo P. Martello" > > <carlos.martello@ > escreveu > > > > > > 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: carlosmartello@ > > > > > > > > > > > > De: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> <mailto:oracle_ br% > 40yahoogrupos. com.br> > > [mailto:[EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> <mailto:oracle_ br% > 40yahoogrupos. com.br> > > ] Em > > > nome de Gabriel Herdt > > > Enviada em: segunda-feira, 17 de novembro de 2008 16:49 > > > Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br% 40yahoogrupos .com.br> <mailto:oracle_ br% > 40yahoogrupos. 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] > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > Veja quais são os assuntos do momento no Yahoo! +Buscados > http://br.maisbuscados.yahoo.com > > [As partes desta mensagem que não continham texto foram removidas] >