create or replace procedure gerar_xml is
v_file Utl_File.File_Type;
v_xml CLOB;
BEGIN
DECLARE
v_file Utl_File.File_Type;
v_xml CLOB;
v_more BOOLEAN := TRUE;
v_erro varchar2(100);
v_conteudo_arquivo sys.xmltype;
BEGIN
-- Consulta na variavel V_XML
V_XML := DBMS_XMLQUERY.getXML('select * from tabela');
-- IMP é o directory do oracle, arquivo.XML
V_FILE := UTL_FILE.fopen('IMP', 'arquivo.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
v_erro := Substr(SQLERRM, 1, 255);
--tabela log_temp é o local para gravar o erro gerado pelo exception
insert into log_temp
values (v_erro,sysdate);
commit;
--DBMS_OUTPUT.PUT_LINE(Substr(SQLERRM, 1, 255));
Utl_File.FClose(v_file);
END;
END;
Cristiano, parabéns, suas dicas ajudam muito.
ResponderExcluirGostaria de uma ajuda, recebi uma demanda para fazer em pl/sql, tem uma página web que recebe um arquivo xml em um input file e tenho que pegar esse arquivo para ler algumas informações e gravar essas informações especificas e também o arquivo xml em uma tabela no db. Não tenho ideia de como ler esse arquivo. Teria uma dica?
Pensei em colocar o arquivo em uma variável e ler essa variável, mas não consegui, já vasculhei a internet até na comunidade Oracle e nada.