Oracle10g utl_file.put_行不工作

Oracle10g utl_file.put_行不工作,oracle10g,utl-file,Oracle10g,Utl File,我需要生成一个XML并将其写入一个文件。 我使用了utl_file.put_行。它创建了文件,但没有写入任何内容。而且,它没有显示错误。 我已经检查了我是否有在目录上写入的权限。 代码: 出于性能原因,UTL_文件使用一个缓冲区,该缓冲区定期刷新到磁盘上的实际文件。一般来说,您不需要担心刷新,除非您需要在最后使用UTL_file.fclose(xmlfile)关闭文件刚刚发现我可以使用dbms_xslprocessor.clob2file将xml直接发送到我的文件中,该文件可以正常工作。但我仍然

我需要生成一个XML并将其写入一个文件。 我使用了utl_file.put_行。它创建了文件,但没有写入任何内容。而且,它没有显示错误。 我已经检查了我是否有在目录上写入的权限。 代码:


出于性能原因,UTL_文件使用一个缓冲区,该缓冲区定期刷新到磁盘上的实际文件。一般来说,您不需要担心刷新,除非您需要在最后使用
UTL_file.fclose(xmlfile)关闭文件

刚刚发现我可以使用dbms_xslprocessor.clob2file将xml直接发送到我的文件中,该文件可以正常工作。但我仍然想知道为什么utl_file.put_行不起作用。可能是因为您从未使用utl_file.fclose关闭文件-utl_file将数据保存在缓冲区中并定期将其刷新到磁盘,或者如果您使用fclose。@JeffreyKemp是的,这就解决了问题。把它作为答案,这样我就可以投你一票了。
SET serveroutput ON;
DECLARE
    ctx DBMS_XMLGEN.CTXHANDLE;
    resposta CLOB;
    xml_file utl_file.file_type;
BEGIN
    xml_file:=utl_file.fopen ('DATA_PUMP_DIR', 'xml.txt', 'W');
    ctx := dbms_xmlgen.newContext ('select * from tb_museu M where M.cnpj=111111 OR   M.cnpj=222222');
    dbms_xmlgen.setRowsetTag (ctx, 'TODOS_OS_MUSEUS');
    dbms_xmlgen.setRowTag (ctx, 'MUSEU');
    resposta :=dbms_xmlgen.getXML (ctx);
    utl_file.put_line (xml_file,'teste');
    --utl_file.put_line (xml_file,resposta);
   dbms_xmlgen.closeContext(ctx);
END;
/