Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fernandopiccini

xml

Recommended Posts

Ola pessoal,

 

Estou tentando criar uma procedure para criar um arquivo XML apartir de uma consulta, porém ela não esta gerando o arquivo. (Ela esta compilando sem erros)

 

 

Alguem sabe pq ela não esta criando o arquivo????

 

Segue o código implementado logo abaixo:

 

 

create or replace

procedure gerar_xml is

nm_usuario_w varchar2(15);

arquivo_saida UTL_File.File_Type;

Cursor c01 is

select nm_usuario

from usuario;

BEGIN

arquivo_saida := UTL_File.Fopen('C:','sardinha.txt', 'A');

OPEN C01;

LOOP

FETCH C01 into

nm_usuario_w;

exit when c01%notfound;

begin

UTL_File.Put_Line(arquivo_saida, nm_usuario_w);

end;

END LOOP;

CLOSE C01;

UTL_File.Fclose(arquivo_saida);

Dbms_Output.Put_Line('Arquivo gerado com sucesso.');

EXCEPTION

WHEN UTL_FILE.INVALID_OPERATION THEN

Dbms_Output.Put_Line('Operação inválida no arquivo.');

UTL_File.Fclose(arquivo_saida);

WHEN UTL_FILE.WRITE_ERROR THEN

Dbms_Output.Put_Line('Erro de gravação no arquivo.');

UTL_File.Fclose(arquivo_saida);

WHEN UTL_FILE.INVALID_PATH THEN

Dbms_Output.Put_Line('Diretório inválido.');

UTL_File.Fclose(arquivo_saida);

WHEN UTL_FILE.INVALID_MODE THEN

Dbms_Output.Put_Line('Modo de acesso inválido.');

UTL_File.Fclose(arquivo_saida);

WHEN Others THEN

Dbms_Output.Put_Line('Problemas na geração do arquivo.');

utl_file.fflush(arquivo_saida);

UTL_File.Fclose_all;

end gerar_xml;

/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Qual lugar da procedure você está gerando o XML, pois pelo que ví, você está somente utilizando o UTL_FILE para abrir um arquivo TXT, nada mas. Abraços, <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando,

 

Abaixo vou lhe passar um exemplo de como gerar um arquivo XML no Oracle 9i.

 

SET SERVEROUTPUT ONDECLARE  v_file  Utl_File.File_Type;  v_xml   CLOB;  v_more  BOOLEAN := TRUE;BEGIN  v_xml := DBMS_XMLQuery.GetXML('SELECT table_name, tablespace_name FROM user_tables WHERE rownum < 6');  v_file := Utl_File.FOpen('C:\RodrigoAlmeida\XML', 'teste.xml', 'w');  WHILE v_more LOOP	Utl_File.Put(v_file, Substr(v_xml, 1, 32767));	IF Length(v_xml) > 32767 THEN	  v_xml :=  Substr(v_xml, 32768);	ELSE	  v_more := FALSE;	END IF;  END LOOP;  Utl_File.FClose(v_file);EXCEPTION  WHEN OTHERS THEN	DBMS_OUTPUT.PUT_LINE(Substr(SQLERRM,1,255));	Utl_File.FClose(v_file);END;/

Percebeu que não mudou muito, apenas no UTL_FILE mandei criar um arquivo com a extensão XML e utilizei o pacote DBMS_XMLQuery, com isso consegui um arquivo XML.

 

Se quizer mais informações para melhor sua procedure, procure no Google pelo pacote DBMS_XMLQuery

 

Aí conseguirá melhores resultados.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que esta dando a seguinte mensagem quando tento rodar a procedure, segue abaixo:

 

"identifier 'DBMS_XMLQUERY.GETXML' must be declared";

 

provavelmente não possue esta packge! Se for isso, onde consigo, ou como faço para instalar a mesma???

 

Estou usando a versão: 9.2.0.5.0 do Oracle

 

Gostaria q esclarece-se estas dúvidas, porém fico agradecido pela ajuda :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando,

 

Seguinte, escrevi uma coluna uns tempos atrás sobre o XML no Oracle, e os requisitos para instalação. Vale a pena dar uma olhada, se tiver dúvidas poste aqui.

 

Oracle e XML

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Rodrigo,

 

Achei bem interessante o seu artigo, até mesmo antes de ter postado a dúvida aqui

no fórum eu ja havia visto/analisado seu artigo.

Testei o mesmo e funcionou, aquele exempo se utiliza da packge: "dbms_xmlgen"

a qual consegui montar uma procedure e rodar a mesma sem problemas.

Porém :( gostaria q fosse especificado um caminho para ela gerar o arquivo, mas mesmo informando não gerou nada.

 

Não sei se tem q liberar algum privilégio ou permissão para q seja gerado o arquivo?!?!?!

 

Fica ai a dúvida, mas sempre agradeço pela sua ajuda

 

abraço http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando,

 

O caminho que será gerado o XML é o caminho que está no parametro de inicialização utl_dir do seu banco de dados.

 

Entre no sql*plus, e dê o seguinte comando:

 

SQL > show parameters utl_dir

 

Ele irá mostar o caminho exato que você pode gerar seus TXT ou XML, e caso esteja com *, isso lhe permite que grave arquivos por todos os diretorios do servidor, sem precisar de uma caminho específico.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.