Bom Dia,, Para converter o clob em varchar utilizo o seguinte comando,,
select sys.dbms_lob.substr(dbms_metadata.get_ddl('USER',usuario), sys.dbms_lob.getlength(dbms_metadata.get_ddl 'USER',usuario))) DDL from dual neste caso para gerar o DDL de criação de usuários... mas nunca o utilizei dentro de uma procedure,, Veja se da certo Gustavo Veríssimo --- Em oracle_br@yahoogrupos.com.br, "Gabriel Herdt" <[EMAIL PROTECTED]> escreveu > > 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 > <waraujo_bh@> 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 <carlos.martello@> > > 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] > > >