Re: RES: [oracle_br] Salvar CLOB em um arquivo

2008-10-29 Por tôpico Oracle
Renato, obrigado pela dica. Alterei o procedimento e funcionou 
perfeitamento. Segue abaixo como ficou:

CREATE OR REPLACE PROCEDURE MGADO.PRC_EXPORTA_CLOB(P_CONTEUDO IN CLOB, 
P_NOME_ARQUIVO IN VARCHAR2, P_CAMINHO IN VARCHAR2) IS

  V_CORPO_ARQUIVO CLOB;
  V_NOME_ARQUIVO  VARCHAR2(100);
  L_EXEC VARCHAR2(1000);
  PROCEDURE PUT_LOCAL_BINARY_DATA(P_DATA IN CLOB,
  P_DIR  IN VARCHAR2,
  P_FILE IN VARCHAR2) IS
L_OUT_FILE UTL_FILE.FILE_TYPE;
L_POS  INTEGER := 1;
L_CLOB_LEN INTEGER;
L_TEXT VARCHAR2(1000);
  BEGIN
L_CLOB_LEN := DBMS_LOB.GETLENGTH(P_DATA);

L_OUT_FILE := UTL_FILE.FOPEN(P_DIR, P_FILE, 'w', 32767);
WHILE L_POS < L_CLOB_LEN LOOP
  L_TEXT:= Substrb(P_DATA, L_POS, 1000);
  UTL_FILE.put(L_OUT_FILE, L_TEXT);
  UTL_FILE.FFLUSH(L_OUT_FILE);
  L_POS := L_POS + 1000;
END LOOP;

UTL_FILE.FCLOSE(L_OUT_FILE);
  EXCEPTION
WHEN OTHERS THEN
  IF UTL_FILE.IS_OPEN(L_OUT_FILE) THEN
UTL_FILE.FCLOSE(L_OUT_FILE);
  END IF;
  RAISE;
  END;

BEGIN
  L_EXEC := 'create or replace directory DINAMICO_DIR as 
'''||P_CAMINHO||'''';

  EXECUTE IMMEDIATE(L_EXEC);
 
  L_EXEC := 'GRANT READ ON DIRECTORY DINAMICO_DIR TO USUARIO WITH GRANT 
OPTION';

  EXECUTE IMMEDIATE(L_EXEC);
 
  L_EXEC := 'GRANT WRITE ON DIRECTORY DINAMICO_DIR TO USUARIO WITH GRANT 
OPTION';
   
  EXECUTE IMMEDIATE(L_EXEC);

  DBMS_LOB.CREATETEMPORARY(V_CORPO_ARQUIVO, TRUE);

  V_CORPO_ARQUIVO := P_CONTEUDO;
  V_NOME_ARQUIVO  := P_NOME_ARQUIVO;

  PUT_LOCAL_BINARY_DATA(P_DATA => V_CORPO_ARQUIVO,
P_DIR  => 'DINAMICO_DIR', -- Diretório.
P_FILE => V_NOME_ARQUIVO);
  DBMS_LOB.CREATETEMPORARY(V_CORPO_ARQUIVO, TRUE);

  DBMS_LOB.FREETEMPORARY(V_CORPO_ARQUIVO);
 
  EXECUTE IMMEDIATE('drop directory DINAMICO_DIR');

END PRC_EXPORTA_CLOB;


-- 
Rafael Bahr
Analista de Sistemas
41 3019-6959 / 11 3522-4470 / 21 4063-6959
Mega Sistemas Corporativos
Unidade Curitiba
www.mega.com.br




Renato Ricci - Usina Mandu escreveu:
>
> Rafael, tenho uma rotina para exportar, porém é para campo do tipo 
> BLOB.. Dê
> uma olhada e faça as alterações necessárias para o tipo de seu campo:
>
> procedure prc_exporta_blob(p_conteudo in blob, p_nome_arquivo in 
> varchar2)is
>
> v_corpo_arquivo blob;
> v_nome_arquivo varchar2(100);
>
> procedure put_local_binary_data (p_data in blob,
> p_dir in varchar2,
> p_file in varchar2) is
> l_out_file utl_file.file_type;
> l_buffer raw(32767);
> l_amount binary_integer := 32767;
> l_pos integer := 1;
> l_blob_len integer;
> begin
> l_blob_len := dbms_lob.getlength(p_data);
>
> l_out_file := utl_file.fopen(p_dir, p_file, 'w',32767);
>
> while l_pos < l_blob_len loop
> dbms_lob.read (p_data, l_amount, l_pos, l_buffer);
> utl_file.put_raw(l_out_file, l_buffer, true);
> utl_file.fflush(l_out_file);
> l_pos := l_pos + l_amount;
> end loop;
>
> utl_file.fclose(l_out_file);
> exception
> when others then
> if utl_file.is_open(l_out_file) then
> utl_file.fclose(l_out_file);
> end if;
> raise;
> end;
>
> begin
>
> dbms_lob.createtemporary (v_corpo_arquivo, true);
>
> v_corpo_arquivo := p_conteudo;
> v_nome_arquivo := p_nome_arquivo;
>
> put_local_binary_data (p_data => v_corpo_arquivo,
> p_dir => 'DIR_XML', -- Diretório.
> p_file => v_nome_arquivo);
> dbms_lob.createtemporary (v_corpo_arquivo, true);
>
> dbms_lob.freetemporary (v_corpo_arquivo);
>
> end prc_exporta_blob;
>
> Abraço,
>
> ___
>
> Renato Ribeiro Ricci
>
> Analista de Sistemas
>
> _
>
> De: oracle_br@yahoogrupos.com.br 
> <mailto:oracle_br%40yahoogrupos.com.br> 
> [mailto:oracle_br@yahoogrupos.com.br 
> <mailto:oracle_br%40yahoogrupos.com.br>] Em
> nome de Wagner Franze Junior
> Enviada em: terça-feira, 28 de outubro de 2008 20:33
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
> Assunto: Res: [oracle_br] Salvar CLOB em um arquivo
>
> Oi Rafael,
>
> Você vai gerar esse arquivo com UTL_FILE?
>
> 
> De: Oracle mailto:rocha.oracle%40gmail.com> gmail.com>
> Para: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> 
> os.com.br
> Enviadas: Terça-feira, 28 de Outubro de 2008 16:12:41
> Assunto: [oracle_br] Salvar CLOB em um arquivo
>
> Boa tarde Pessoal,
>
> alguém sabe como salvar uma variável CLOB em um arquivo??
>
> Att.
>
> -- 
> Rafael Bahr Esposito da Rocha
> Analista de Sistemas
> (41) 9199-1286
>
> Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua
> cara @ymail.com ou @rocketmail.com.
> http://br.new. <http://br.new.mail.yahoo.com/addresses 
> <http://br.new.mail.yahoo.com/addresses>>
> mail.yahoo.com/addresses
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  


Re: RES: [oracle_br] Salvar CLOB em um arquivo

2008-10-29 Por tôpico Oracle
Renato,

alterei a procedure e consegui salvar no arquivo. Segue abaixo como ela 
ficou.

CREATE OR REPLACE PROCEDURE MGADO.PRC_EXPORTA_CLOB(P_CONTEUDO IN CLOB, 
P_NOME_ARQUIVO IN VARCHAR2, P_CAMINHO IN VARCHAR2) IS

  V_CORPO_ARQUIVO CLOB;
  V_NOME_ARQUIVO  VARCHAR2(100);
  L_EXEC VARCHAR2(1000);
  PROCEDURE PUT_LOCAL_BINARY_DATA(P_DATA IN CLOB,
  P_DIR  IN VARCHAR2,
  P_FILE IN VARCHAR2) IS
L_OUT_FILE UTL_FILE.FILE_TYPE;
L_POS  INTEGER := 1;
L_CLOB_LEN INTEGER;
L_TEXT VARCHAR2(1000);
  BEGIN
L_CLOB_LEN := DBMS_LOB.GETLENGTH(P_DATA);

L_OUT_FILE := UTL_FILE.FOPEN(P_DIR, P_FILE, 'w', 32767);
WHILE L_POS < L_CLOB_LEN LOOP
  L_TEXT:= Substrb(P_DATA, L_POS, 1000);
  UTL_FILE.put(L_OUT_FILE, L_TEXT);
  UTL_FILE.FFLUSH(L_OUT_FILE);
  L_POS := L_POS + 1000;
END LOOP;

UTL_FILE.FCLOSE(L_OUT_FILE);
  EXCEPTION
WHEN OTHERS THEN
  IF UTL_FILE.IS_OPEN(L_OUT_FILE) THEN
UTL_FILE.FCLOSE(L_OUT_FILE);
  END IF;
  RAISE;
  END;

BEGIN
  L_EXEC := 'create or replace directory DINAMICO_DIR as 
'''||P_CAMINHO||'''';

  EXECUTE IMMEDIATE(L_EXEC);
 
  L_EXEC := 'GRANT WRITE ON DIRECTORY DINAMICO_DIR TO MEGA WITH GRANT 
OPTION';
   
  EXECUTE IMMEDIATE(L_EXEC);

  DBMS_LOB.CREATETEMPORARY(V_CORPO_ARQUIVO, TRUE);

  V_CORPO_ARQUIVO := P_CONTEUDO;
  V_NOME_ARQUIVO  := P_NOME_ARQUIVO;

  PUT_LOCAL_BINARY_DATA(P_DATA => V_CORPO_ARQUIVO,
P_DIR  => 'DINAMICO_DIR', -- Diretório.
P_FILE => V_NOME_ARQUIVO);
  DBMS_LOB.CREATETEMPORARY(V_CORPO_ARQUIVO, TRUE);

  DBMS_LOB.FREETEMPORARY(V_CORPO_ARQUIVO);
 
  EXECUTE IMMEDIATE('drop directory DINAMICO_DIR');

END PRC_EXPORTA_CLOB;



Obrigado.

Rafael Bahr Esposito da Rocha
Analista de Sistemas
(41) 9199-1286



Renato Ricci - Usina Mandu escreveu:
>
> Rafael, tenho uma rotina para exportar, porém é para campo do tipo 
> BLOB.. Dê
> uma olhada e faça as alterações necessárias para o tipo de seu campo:
>
> procedure prc_exporta_blob(p_conteudo in blob, p_nome_arquivo in 
> varchar2)is
>
> v_corpo_arquivo blob;
> v_nome_arquivo varchar2(100);
>
> procedure put_local_binary_data (p_data in blob,
> p_dir in varchar2,
> p_file in varchar2) is
> l_out_file utl_file.file_type;
> l_buffer raw(32767);
> l_amount binary_integer := 32767;
> l_pos integer := 1;
> l_blob_len integer;
> begin
> l_blob_len := dbms_lob.getlength(p_data);
>
> l_out_file := utl_file.fopen(p_dir, p_file, 'w',32767);
>
> while l_pos < l_blob_len loop
> dbms_lob.read (p_data, l_amount, l_pos, l_buffer);
> utl_file.put_raw(l_out_file, l_buffer, true);
> utl_file.fflush(l_out_file);
> l_pos := l_pos + l_amount;
> end loop;
>
> utl_file.fclose(l_out_file);
> exception
> when others then
> if utl_file.is_open(l_out_file) then
> utl_file.fclose(l_out_file);
> end if;
> raise;
> end;
>
> begin
>
> dbms_lob.createtemporary (v_corpo_arquivo, true);
>
> v_corpo_arquivo := p_conteudo;
> v_nome_arquivo := p_nome_arquivo;
>
> put_local_binary_data (p_data => v_corpo_arquivo,
> p_dir => 'DIR_XML', -- Diretório.
> p_file => v_nome_arquivo);
> dbms_lob.createtemporary (v_corpo_arquivo, true);
>
> dbms_lob.freetemporary (v_corpo_arquivo);
>
> end prc_exporta_blob;
>
> Abraço,
>
> ___
>
> Renato Ribeiro Ricci
>
> Analista de Sistemas
>
> _
>
> De: oracle_br@yahoogrupos.com.br 
> <mailto:oracle_br%40yahoogrupos.com.br> 
> [mailto:oracle_br@yahoogrupos.com.br 
> <mailto:oracle_br%40yahoogrupos.com.br>] Em
> nome de Wagner Franze Junior
> Enviada em: terça-feira, 28 de outubro de 2008 20:33
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
> Assunto: Res: [oracle_br] Salvar CLOB em um arquivo
>
> Oi Rafael,
>
> Você vai gerar esse arquivo com UTL_FILE?
>
> 
> De: Oracle mailto:rocha.oracle%40gmail.com> gmail.com>
> Para: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> 
> os.com.br
> Enviadas: Terça-feira, 28 de Outubro de 2008 16:12:41
> Assunto: [oracle_br] Salvar CLOB em um arquivo
>
> Boa tarde Pessoal,
>
> alguém sabe como salvar uma variável CLOB em um arquivo??
>
> Att.
>
> -- 
> Rafael Bahr Esposito da Rocha
> Analista de Sistemas
> (41) 9199-1286
>
> Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua
> cara @ymail.com ou @rocketmail.com.
> http://br.new. <http://br.new.mail.yahoo.com/addresses 
> <http://br.new.mail.yahoo.com/addresses>>
> mail.yahoo.com/addresses
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  


RES: [oracle_br] Salvar CLOB em um arquivo

2008-10-29 Por tôpico Renato Ricci - Usina Mandu
Rafael, tenho uma rotina para exportar, porém é para campo do tipo BLOB.. Dê
uma olhada e faça as alterações necessárias para o tipo de seu campo:

 

procedure prc_exporta_blob(p_conteudo in blob, p_nome_arquivo in varchar2)is

   v_corpo_arquivo blob; 
   v_nome_arquivo  varchar2(100); 
   
   procedure put_local_binary_data (p_data  in  blob, 
p_dir   in  varchar2, 
p_file  in  varchar2) is 
  l_out_file  utl_file.file_type; 
  l_bufferraw(32767); 
  l_amountbinary_integer := 32767; 
  l_pos   integer := 1; 
  l_blob_len  integer; 
   begin 
  l_blob_len := dbms_lob.getlength(p_data); 

  l_out_file := utl_file.fopen(p_dir, p_file, 'w',32767); 

  while l_pos < l_blob_len loop 
 dbms_lob.read (p_data, l_amount, l_pos, l_buffer); 
 utl_file.put_raw(l_out_file, l_buffer, true); 
 utl_file.fflush(l_out_file); 
 l_pos := l_pos + l_amount; 
  end loop; 

  utl_file.fclose(l_out_file); 
   exception 
  when others then 
 if utl_file.is_open(l_out_file) then 
utl_file.fclose(l_out_file); 
 end if; 
 raise; 
   end; 

begin 

   dbms_lob.createtemporary (v_corpo_arquivo, true);
   
   v_corpo_arquivo := p_conteudo;
   v_nome_arquivo := p_nome_arquivo;
   
   put_local_binary_data (p_data => v_corpo_arquivo, 
  p_dir  => 'DIR_XML', -- Diretório. 
  p_file => v_nome_arquivo); 
dbms_lob.createtemporary (v_corpo_arquivo, true);  

   
   dbms_lob.freetemporary (v_corpo_arquivo); 
  
end prc_exporta_blob;

 

 

Abraço,

 

___

Renato Ribeiro Ricci

Analista de Sistemas

 

  _  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Wagner Franze Junior
Enviada em: terça-feira, 28 de outubro de 2008 20:33
Para: oracle_br@yahoogrupos.com.br
Assunto: Res: [oracle_br] Salvar CLOB em um arquivo

 

Oi Rafael,

Você vai gerar esse arquivo com UTL_FILE?


De: Oracle mailto:rocha.oracle%40gmail.com> gmail.com>
Para: [EMAIL PROTECTED] <mailto:oracle_br%40yahoogrupos.com.br> os.com.br
Enviadas: Terça-feira, 28 de Outubro de 2008 16:12:41
Assunto: [oracle_br] Salvar CLOB em um arquivo

Boa tarde Pessoal,

alguém sabe como salvar uma variável CLOB em um arquivo??

Att.

-- 
Rafael Bahr Esposito da Rocha
Analista de Sistemas
(41) 9199-1286

Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua
cara @ymail.com ou @rocketmail.com.
http://br.new. <http://br.new.mail.yahoo.com/addresses>
mail.yahoo.com/addresses

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

 



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



Res: [oracle_br] Salvar CLOB em um arquivo

2008-10-28 Por tôpico Wagner Franze Junior
Oi Rafael,

Você vai gerar esse arquivo com UTL_FILE?

 






De: Oracle <[EMAIL PROTECTED]>
Para: oracle_br@yahoogrupos.com.br
Enviadas: Terça-feira, 28 de Outubro de 2008 16:12:41
Assunto: [oracle_br] Salvar CLOB em um arquivo


Boa tarde Pessoal,

alguém sabe como salvar uma variável CLOB em um arquivo??

Att.

-- 
Rafael Bahr Esposito da Rocha
Analista de Sistemas
(41) 9199-1286




  Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua 
cara @ymail.com ou @rocketmail.com.
http://br.new.mail.yahoo.com/addresses

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