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