如何为每条记录创建一个xml文件

时间:2014-11-18 15:06:30

标签: xml oracle plsql

我有一个名为test的表,它有n列,包括一个标志列。现在我的问题是,如何为每条记录创建一个xml文件,同时我也需要更新标志列。

考虑下表

sno details flag

1, 'XYZ', 'Y' 2, 'ABC', 'Y' 3, 'DEF', 'Y' 4, 'GHI', 'Y' 5, 'JKL', 'Y' 6, 'MNO', 'y' 的

现在我想为记录1,'xyz','y'创建xml文件,例如xmlfile1,并且需要将表中的标志状态更新为'n',并且我需要为所有其他记录执行相同操作

任何人都可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

试试这个

with xml_source as (select 1 id, 'xyz' val, 'y' flag
                      from dual
                    union all
                    select 2, 'abc', 'y'
                      from dual
                    union all
                    select 3, 'def', 'y'
                      from dual
                    union all
                    select 4, 'ghi', 'y'
                      from dual
                    union all
                    select 5, 'jkl', 'y'
                      from dual
                    union all
                    select 6, 'mno', 'y' from dual)

 select xmlagg(xmlelement(TABLE_NAME, (xmlelement(TABLE_ROW, XMLATTRIBUTES(x.id AS ID), xmlforest(x.val as Value)))))
  from xml_source x

您还可以阅读Generating XML Data from the Database

答案 1 :(得分:0)

感谢您的建议..我在下面做了

创建表测试(sno编号,详细信息varchar2(20),标志varchar2(1)约束flag_cons检查(标记在(&#39; y&#39;,&#39; n&#39;)); < / p>

插入测试值(1,&#39; xyz&#39;,&#39; y&#39;);

插入测试值(2,&#39; abc&#39;,&#39; y&#39;);

插入测试值(3,&#39; def&#39;,&#39; y&#39;);

插入测试值(4,&#39; ghi&#39;,&#39; y&#39;);

插入测试值(5,&#39; jkl&#39;,&#39; y&#39;);

插入测试值(6,&#39; mno&#39;,&#39; y&#39;);

将DIRECTORY xml_dir创建或替换为xxxxx;

创建或替换过程xml_example IS

CURSOR query_str is select * from test ;


row_type test%rowtype;

xml_file clob;

v_MyFileHandle UTL_FILE.FILE_TYPE;

BEGIN     for query_str中的row_type      LOOP

     select dbms_xmlquery.getxml('select * from test where sno='||row_type.sno,0) into xml_file from dual;

     v_MyFileHandle := UTL_FILE.FOPEN('XML_DIR','xmlfile'||to_char(query_str%rowcount),'w');

     UTL_FILE.PUT_LINE(v_MyFileHandle,xml_file  );

     UTL_FILE.FCLOSE(v_MyFileHandle);

     update test set flag='n' where sno=row_type.sno ;

END LOOP;

END xml_example;