Pois é, é byte pra dedéu, é um pedido incomum pra dizer o mínimo - e 
na verdade eu só fui nas docs pra confirmar, eu já tinha um feeling 
de que isso seria limitação (conhecendo o nosso amigo PL/SQL, que 
nada mais é do que uma série de structs C com alguns programinhas que 
os acessam, e sabendo que muitos desses caras foram limitados em 32 
Kb - que é o valor máximo pra vários compiladores C em ambiente 32 
bits - , eu já imaginava que devia ter esse limite....  Quanto à 
utl_file.put_raw, não sei se funcionaria, já que a própria chamada 
inicial obrigatória do utl_file.fopen tem o limite, é testar....

[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, "Marcio Portes" 
<[EMAIL PROTECTED]> escreveu
>
> Pra ser sincero, nem fui lá nos docs. ;-) Obrigado.
> Nunca precisei ir tão longe com a linha, ou seja, 32k é byte pra 
dedeu.
> Outra possibilidade além de rotina externa, poderia ser gravar isso 
em blob,
> usando o put_raw. (mas é chute, não testei...)
> 
> On 4/10/07, jlchiappa <[EMAIL PROTECTED]> wrote:
> >
> >   Márcio, ao que eu entendi o cara quer ler/gravar arquivo texto 
com
> > linhas maiores que 32767 bytes,né ? Aí não é limitação de SO, é
> > limitação da própria UTL_FILE, o manual "Oracle(r) Database PL/SQL
> > Packages and Types Reference" no capítulo sobre a UTL_FILE já nos 
diz
> > (grifo com *s meu) :
> >
> > "
> > UTL_FILEFOPEN Function
> > This function opens a file. You can specify the maximum line size 
and
> > have a maximum of 50 files open simultaneously. See also 
FOPEN_NCHAR
> > Function.
> >
> > Syntax
> >
> > UTL_FILE.FOPEN (
> > location IN VARCHAR2,
> > filename IN VARCHAR2,
> > open_mode IN VARCHAR2,
> > max_linesize IN BINARY_INTEGER)
> > RETURN file_type;
> >
> > Parameters
> >
> > ... blablabla ...
> >
> > max_linesize Maximum number of characters for each line, including
> > the newline character, for this file (minimum value 1, **** 
maximum
> > value 32767 **** ). If unspecified, Oracle supplies a default 
value
> > of 1024.
> > "
> >
> > ===> então com utl_file essa (estranha!!) requisição de ler/gravar
> > arquivo com linhas maiores que isso não rola, extrapola o limite 
da
> > utl_file - digo estranha porque muitas vezes nem editores de texto
> > especializados manipulam arquiivos com linhas tãããão largas, é
> > incomum pra dizer o mínimo.... Pra essa necessidade então o colega
> > terá que escrever uma rotina EXTERNA ao PL/SQL (em C ou Java,
> > provavelmente) e a chamar do PL/SQL via external proc ou java 
proc.
> >
> > []s
> >
> > Chiappa
> >
> > --- Em oracle_br@yahoogrupos.com.br <oracle_br%
40yahoogrupos.com.br>,
> > "Marcio Portes"
> > <portes.marcio@> escreveu
> > >
> > > Já verificou como está na origem. Passando os olhos no seu 
código,
> > não vejo
> > > nenhum problema.
> > > Voce usa o utl_file.put() que prepara a linha e não gera um "\n"
> > (new line).
> > > Mas nunca fiz um arquivo texto que tivesse mais de 32k no longo 
da
> > linha,
> > > não sei se é permitido no sistema opernacional.
> > >
> > >
> > > On 4/10/07, a_coelho59 <acoelho@> wrote:
> > > >
> > > > 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 <oracle_br%
40yahoogrupos.com.br><oracle_br%
> > 40yahoogrupos.com.br>,
> >
> > > > "Marcio Portes"
> > > > <portes.marcio@> 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 <acoelho@> 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]
> > > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > 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]
> > >
> >
> >  
> >
> 
> 
> 
> -- 
> 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