在共享组件的报表查询中添加两个查询并下载XML数据时,输出XML结构就像这样(两个ROWSET):
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<DATA>
<ROWSET1>
<ROWSET1_ROW>
<ID></ID>
<NAME></NAME>
</ROWSET1_ROW>
</ROWSET1>
<ROWSET2>
<ROWSET2_ROW>
<ID2></ID2>
<NAME2></NAME2>
</ROWSET2_ROW>
</ROWSET2>
</DATA>
</DOCUMENT>
&#13;
我使用DBMS_XMLGEN.GETXML从我的select语句中生成相同的XML内容。我该怎么办?
两个SQL语句是:
SELECT ID, NAME
FROM TABLE1
SELECT ID2,NAME2
FROM TABLE2
答案 0 :(得分:2)
DECLARE
l_ctx dbms_xmlgen.ctxhandle;
v_clob clob;
begin
l_ctx := dbms_xmlgen.newcontext('select cursor(select * from TABLE1) as rowset1,cursor(select * from TABLE2 ) as rowset2 from dual');
dbms_xmlgen.setrowsettag(l_ctx, 'DOCUMENT');
dbms_xmlgen.setrowtag(l_ctx, 'DATA');
v_clob := dbms_xmlgen.getXml(l_ctx);
dbms_xmlgen.closeContext(l_ctx);
dbms_output.put_line(v_clob);
end;
结果是。
<?xml version="1.0"?>
<DOCUMENT>
<DATA>
<ROWSET1>
<ROWSET1_ROW>
<ID>1</ID>
<NAME>a</NAME>
</ROWSET1_ROW>
</ROWSET1>
<ROWSET2>
<ROWSET2_ROW>
<ID>1</ID>
<NAME>a</NAME>
</ROWSET2_ROW>
</ROWSET2>
</DATA>
</DOCUMENT>
或者,如果您不必重命名根元素。做选择。
select dbms_xmlgen.getxml('select cursor(select * from TABLE1) as rowset1,cursor(select * from TABLE2 ) as rowset2 from dual') from dual;
结果
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ROWSET1>
<ROWSET1_ROW>
<ID>1</ID>
<NAME>a</NAME>
</ROWSET1_ROW>
</ROWSET1>
<ROWSET2>
<ROWSET2_ROW>
<ID>1</ID>
<NAME>a</NAME>
</ROWSET2_ROW>
</ROWSET2>
</ROW>
</ROWSET>
答案 1 :(得分:1)
类似的东西:
SELECT '<?xml version="1.0" encoding="UTF-8"?>'
|| XMLElement(
"DOCUMENT",
XMLElement(
"DATA",
XMLAggregate(
row_xml
)
)
).getClobVal() AS xml
FROM (
SELECT XMLElement(
"ROWSET1",
XMLAggregate(
XMLElement(
"ROWSET1_ROW",
XMLForest(
id,
name
)
)
)
) AS row_xml
FROM table1
UNION ALL
SELECT XMLElement(
"ROWSET2",
XMLAggregate(
XMLElement(
"ROWSET2_ROW",
XMLForest(
id AS "ID2",
name AS "NAME2"
)
)
)
)
FROM table2
)