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]
>


Responder a