我一直在搜索文档和谷歌,但我似乎无法找到我要找的东西;我的oracle版本是10.2.0.5。
让我们使用这个简单的查询:
select dbms_xmlgen.getxml('select cursor(select ''1'' "one", ''2''
"two", ''3'' "three" from dual) "numbers" from dual') from dual;
结果是:
"<?xml version="1.0"?>
<ROWSET>
<ROW>
<numbers>
<numbers_ROW>
<one>1</one>
<two>2</two>
<three>3</three>
</numbers_ROW>
</numbers>
</ROW>
</ROWSET>
"
问题1:为什么在“数字”足够时(至少就我的目的而言)是否会创建“numbers_row”?
问题2:我可以使用xmlgen包或其他包来摆脱额外的嵌套吗?我正在使用正则表达式,但这似乎有点不合理。
谢谢你, -joel
答案 0 :(得分:2)
您需要阅读这篇文章: http://www.orafaq.com/wiki/DBMS_XMLGEN
它解释了如何更改DBMS_XMLGEN
包生成的Oracle默认名称。
问题1的答案是:它是Oracle DBMS_XMLGEN包的默认值和行为
对于问题2:您需要调用一些额外的DBMS_XMLGEN
过程来更改默认值,因此您需要使用PL / SQL:
DECLARE
ctx DBMS_XMLGEN.ctxHandle;
xml CLOB;
BEGIN
ctx := dbms_xmlgen.newcontext('select ''1'' "one", ''2'' "two", ''3'' "three" from dual');
dbms_xmlgen.setRowTag(ctx, 'NUMBERS');
xml := dbms_xmlgen.getxml(ctx);
dbms_output.put_line(substr(xml,1,255));
END;
输出:
<?xml version="1.0"?>
<ROWSET>
<NUMBERS>
<one>1</one>
<two>2</two>
<three>3</three>
</NUMBERS>
</ROWSET>
有一些程序可以用更有意义的东西替换<ROWSET>
值。
希望它有所帮助...