- Este tópico contém 7 respostas, 2 vozes e foi atualizado pela última vez 10 anos, 8 meses atrás por Sulimar Arse.
-
AutorPosts
-
12 de março de 2014 às 6:19 pm #106393Sulimar ArseParticipante
Olá pessoal sou novo neste fórum, é minha primeira participação!
Já consegui gerar o XML a partir de uma query, preciso saber como gerar trocando as tags
1
A VISTA
A
2
À PRAZO
P
Segue o script que gera o XML acima:
SELECT value(tpg).getCLOBVal() AS “XMLTYPE”
FROM table(XMLSequence(Cursor(SELECT CDTIPOPAGTO CODIGO_TIPO_PAGTO
,LTRIM(RTRIM(SUBSTR(NOTIPOPAGTO,1,25))) DESC_TIPO_PAGTO
,DECODE(FIN_TIPOPAGTO.FLGCONDPAGTO, ‘N’,’A’,’P’) TIPO_FORMA_PAGTO
FROM FIN_TIPOPAGTO))) tpg;13 de março de 2014 às 3:15 pm #106394rmanParticipante@Sulimar Arse
Utilizando 2 REPLACE temos a solução:
SELECT REPLACE(REPLACE(value(tpg).getCLOBVal(),'',''),'','') AS "XMLTYPE"
FROM table(XMLSequence(Cursor(SELECT CDTIPOPAGTO CODIGO_TIPO_PAGTO
,LTRIM(RTRIM(SUBSTR(NOTIPOPAGTO,1,25))) DESC_TIPO_PAGTO
,DECODE(FIN_TIPOPAGTO.FLGCONDPAGTO, 'N','A','P') TIPO_FORMA_PAGTO
FROM FIN_TIPOPAGTO))) tpg;
15 de março de 2014 às 12:54 am #106403Sulimar ArseParticipanteObrigado pela atenção! Consegui resolver a questão com o Replace. 🙂
Agora estou com um ÚNICO problema para resolver:
Quando executo uma proc com o código abaixo gera o arquivo texto desejado com TODOS OS REGISTROS colocados no cursor. Mas usando a mesma estrutura para gerar um cadastro de produtos, corta o arquivo conforme em anexo, alguma dica do que pode estar ocorrendo?
Rodando somente o SELECT DO CURSOR de produtos, mostra todos os registros, mas rodando a procedure pelo PL/SQL ou pelo TOAD, gera o arquivo produtos.txt faltando linhas conforme em anexo (NÃO GERA TODOS OS REGISTROS).
---------------------------------------------------------------------- DBMS_OUTPUT.PUT_LINE ('=====> Gerar o arquivo de FORMAS DE PAGAMENTO '); ---------------------------------------------------------------------- ExpFileName := 'pagamento.txt'; -- ExpFilePath := pPathArq; -- IF NOT sys.UTL_FILE.IS_OPEN (ExpFile) THEN -- ExpFile := sys.UTL_FILE.FOPEN (ExpFilePath, ExpFileName, 'w',9999); --
END IF;
sys.UTL_FILE.PUT_LINE (ExpFile, ''); sys.UTL_FILE.PUT_LINE (ExpFile, ''); -- -- FOR rPagamento IN cPagamento LOOP -- sys.UTL_FILE.PUT (ExpFile, REPLACE(rPagamento.XMLTYPE,'ROW','PAGAMENTO')); -- END LOOP; sys.UTL_FILE.PUT (ExpFile, ''); -- -- IF sys.UTL_FILE.IS_OPEN (ExpFile) THEN sys.UTL_FILE.FFLUSH (ExpFile); sys.UTL_FILE.FCLOSE (ExpFile); END IF;
Arquivo texto gerado completo!
Arquivo texto gerado INCOMPLETO!
Attachments:17 de março de 2014 às 3:31 pm #106405rmanParticipante@Sulimar Arse
Poste a procedure completa do produto por favor.
18 de março de 2014 às 9:21 pm #106407Sulimar ArseParticipantePessoal, alguma dica do que poderia estar causando a geração incompleta do arquivo produtos.txt, a estrutura para gerar o arquivo é idêntica a que descrevi acima, a qual gera TODO o arquivo pagamento.txt. Não é o limite de arquivo, pois não chega nem a 1000 linhas.
18 de março de 2014 às 11:00 pm #106409Sulimar ArseParticipanteSegue o arquivo completo, conforme solicitado, a parte que interessa é o cursor cProduto e a rotina “Gerar o arquivo de PRODUTO”. Talvez possam visualizar algo que esteja impedindo de gerar todos os registros no arquivo.
Reforçando: Executando somente o select que monta o cursor são listados normalmente 403 registros, mas quando gera o a arquivo texto (XML)corta o arquivo conforme enviado anteriormente.
Obrigado pela atenção dispensada até o momento.
Attachments:19 de março de 2014 às 4:04 pm #106410rmanParticipante@Sulimar Arse
FOPEN FunctionSyntax
UTL_FILE.FOPEN (
location IN VARCHAR2,
filename IN VARCHAR2,
open_mode IN VARCHAR2,
max_linesize IN BINARY_INTEGER DEFAULT 1024)
RETURN FILE_TYPE;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.
Primeiro aumente o max_linesize para o máximo, ou seja, 32767.
PUT ProcedureSyntax
UTL_FILE.PUT (
file IN FILE_TYPE,
buffer IN VARCHAR2);Usage Notes
The maximum size of the buffer parameter is 32767 bytes unless you specify a smaller size in FOPEN. If unspecified, Oracle supplies a default value of 1024. The sum of all sequential PUT calls cannot exceed 32767 without intermediate buffer flushes.
Existe um nota para a PROCEDURE PUT. Resumindo você não pode encher o buffer sem antes descarrega-lo em disco, para isso utilize a PROCEDURE FFLUSH.
FFLUSH ProcedureFFLUSH physically writes pending data to the file identified by the file handle. Normally, data being written to a file is buffered. The FFLUSH procedure forces the buffered data to be written to the file. The data must be terminated with a newline character.
Flushing is useful when the file must be read while still open. For example, debugging messages can be flushed to the file so that they can be read immediately.
Syntax
UTL_FILE.FFLUSH (
file IN FILE_TYPE);Os dados descarregados pelo FFLUSH devem ser terminados por NEWLINE, utilize a PROCEDURE NEW_LINE.
NEW_LINE ProcedureThis procedure writes one or more line terminators to the file identified by the input file handle. This procedure is separate from PUT because the line terminator is a platform-specific character or sequence of characters.
Syntax
UTL_FILE.NEW_LINE (
file IN FILE_TYPE,
lines IN BINARY_INTEGER := 1);
Segue a documentação oficial de UTL_FILE:
docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_file.htm
20 de março de 2014 às 1:22 am #106420Sulimar ArseParticipantePessoal,
Gostaria muito de agradecer a vocês!
Com o uso do UTL_FILE.FFLUSH consegui resolver o problema. espero que a rotina sirva de exemplo para outros usuários.Grande abraço!
FOR rDuplicata IN cDuplicata LOOP
—
sys.UTL_FILE.PUT (ExpFile, REPLACE(rDuplicata.XMLTYPE,’ROW’,’DUPLICATA’));
sys.UTL_FILE.FFLUSH (ExpFile);
—
END LOOP; -
AutorPosts
- Você deve fazer login para responder a este tópico.