请大家帮我看一下这个存储过程: 
CREATE OR REPLACE PROCEDURE SP_TEST_XML 
IS 
  path              varchar2(100); 
  file_name          VARCHAR2(50); 
  zeRow              ze_file%ROWTYPE;  
  doc                dbms_xmldom.DOMDocument; 
  main_node          dbms_xmlDom.DOMNode; 
  root_ze_node      dbms_xmlDom.DOMNode; 
  root_ze_elmt      dbms_xmlDom.DOMElement; 
  CURSOR cur_ze IS SELECT * FROM ze_file 
  BEGIN 
  file_name := 'ze'||To_Char(sysdate,'yyyyMMdd')||'.xml'; 
  path := 'XMLDIR/'||file_name; 
  FOR zeRow IN cur_ze Loop 
    begin 
    ze01_elmt := dbms_xmldom.createElement(doc, 'ze01'); 
    ze01_node := dbms_xmldom.appendChild(root_ze_node, 
              dbms_xmldom.makeNode(ze01_elmt)); 
    temp_node := dbms_xmldom.appendChild(ze01_node, 
      dbms_xmlDom.makeNode(dbms_xmldom.createTextNode(doc,zeRow.ze01))); 
    dbms_xmlDom.writeToFile(doc,path); 
  END loop; 
end;  
我想把ze_file这个表ze01里的全部的数据都写到xml文件中,但是这样只能把ze_file中最后一行数据写到xml文件中.也就是说后面的数据总是覆盖前面的,在此想问大家一下有没有什么好的办法能让这个文件追加,而不是覆盖!

解决方案 »

  1.   

    应该先循环生成整个doc最后再一次性写入file不然,哪怕能文件追加,也是一段一段独立的xml格式,而不是整体的xml
      

  2.   

    楼上所说循环生成整个doc,这个doc怎么循环呢?
    难道上一这样吗:
    CREATE OR REPLACE PROCEDURE SP_TEST_XML 
    IS 
      path              varchar2(100); 
      file_name          VARCHAR2(50); 
      zeRow              ze_file%ROWTYPE;  
      doc                dbms_xmldom.DOMDocument; 
      main_node          dbms_xmlDom.DOMNode; 
      root_ze_node      dbms_xmlDom.DOMNode; 
      root_ze_elmt      dbms_xmlDom.DOMElement; 
      CURSOR cur_ze IS SELECT * FROM ze_file 
      BEGIN 
      file_name := 'ze'||To_Char(sysdate,'yyyyMMdd')||'.xml'; 
      path := 'XMLDIR/'||file_name; 
      FOR zeRow IN cur_ze Loop 
        begin 
        ze01_elmt := dbms_xmldom.createElement(doc, 'ze01'); 
        ze01_node := dbms_xmldom.appendChild(root_ze_node, 
                  dbms_xmldom.makeNode(ze01_elmt)); 
        temp_node := dbms_xmldom.appendChild(ze01_node, 
          dbms_xmlDom.makeNode(dbms_xmldom.createTextNode(doc,zeRow.ze01))); 
      END loop; 
     dbms_xmlDom.writeToFile(doc,path); 
    end;