Re: RES: [oracle_br] Salvar CLOB em um arquivo
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
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
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
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]