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


Responder a