Marcio, agora tenho outro problema: O ficheiro está completo mas, parte a linha quando atinge 32767 bytes e coloca o ficheiro xml mal estruturado, conforme o exemplo.
<PartsInvoiceLine type="invoice"> <Part PartNu mber="139427" FranchiseName="OPEL" IsFranchise="false"/> <Quantity>1</Quantity> <UnitCost>31.15</UnitCost> <UnitPrice>62.3</UnitPrice> <UnitListPrice>62.3</UnitListPrice> <Purchase Source="Manufacturer"/> </PartsInvoiceLine> Quem puder agradeço --- Em oracle_br@yahoogrupos.com.br, "Marcio Portes" <[EMAIL PROTECTED]> escreveu > > Voce está dentro de um looping e sabe quem está te jogando fora não? > Quando voce usa o dbms_lob.read, na última passagem ele joga o no_data_found > e manda o ponteiro pra fora do looping. Faltou na sua lógica o tratamento do > no_data_found para gravar o resto. > > Acho que um bom inicio seria: > > ... > EXCEPTION > when no_data_found then > utl_file.put(v_file, v_buffer); > utl_file.fflush( v_file ); > utl_fclose( v_file ); > END ENVIA_XML; > > Eu tirei o WHEN OTHERS de propósito... evite usá-lo. > Quando tiver um tempo, dá uma lidinho em > http://mportes.blogspot.com/2005/07/boas-prticas-de-programao-when- others.html > > > On 4/9/07, a_coelho59 <[EMAIL PROTECTED]> wrote: > > > > Caros amigos; > > Se me puderem ajudar agradeço. > > Tenho uma Clob com mais 32767 caracteres. > > Tenho este procedure para gerar um file. > > Mas não sei como fazer o output da clob com todos os caracteres para > > o file. > > O procedimento é este, se alguem me puder ajudar agradeço: > > > > PROCEDURE ENVIA_XML IS > > V_DIR VARCHAR2(7) := 'http://aplfms:7777/dload'; > > V_NOME VARCHAR2(15) := 'VD_PECAS_PQ.xml'; > > V_FILE UTL_FILE.FILE_TYPE ; > > V_CLOB CLOB ; > > V_BUFFER_SIZE VARCHAR2(32767) ; > > V_BUFFER VARCHAR2(32767) ; > > V_AMOUNT BINARY_INTEGER := 32767 ; > > V_POS INTEGER := 1 ; > > BEGIN > > > > SELECT p.lin.getClobVal() > > INTO V_CLOB > > FROM PC_PQ_LIN_XML1 p > > WHERE p.sqfile = 1 ; > > > > V_FILE := UTL_FILE.fopen(V_DIR, V_NOME , 'W', V_BUFFER_SIZE); > > LOOP > > DBMS_LOB.READ(V_CLOB, V_AMOUNT, V_POS, V_BUFFER); > > UTL_FILE.put(V_FILE, V_BUFFER); > > V_POS := V_POS + V_AMOUNT; > > END LOOP; > > EXCEPTION WHEN OTHERS THEN > > DBMS_OUTPUT.put_line(SQLERRM); > > UTL_FILE.fclose(V_FILE); > > END ENVIA_XML; > > > > Obrigado > > > > > > > > > > -- > Marcio Portes > Material Tecnico em Portugues - http://mportes.blogspot.com > Practical Learning Oracle - > http://mportes.blogspot.com/2006/02/practical-learning-oracle.html > > > [As partes desta mensagem que não continham texto foram removidas] >