我正在使用Oracle 11g(11.1.0.7.0),我必须创建一个查询的XML文件。我在表单6中使用此文件,用户希望能够在表单中按下按钮时创建XML文件,因此我有一个PL / SQL包,用于创建带有XML数据的CLOB文件服务器和表单6i我读取此文件行的行(UTL_FILE.FOPEN读取它,行的UTL_FILE.GET_LINE)和TEXT_IO.PUT_LINE我在客户端计算机上写入文件。 这很好用,但我的XML文件有问题。 现在它看起来像这样(值是示例!):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article>
<Artnumber>12345</Artnumber>
<Artdesc>Black Shoes</Artdesc>
</Article>
<Article>
<Artnumber>12346</Artnumber>
<Artdesc>White Shoes</Artdesc>
</Article>
</ShoeShop>
确定。 我想创建一个类似于以下的XML文件,但我不知道如何!我是SQL / PLSQL的新手,我学习到2个月,在此之前我使用了Progress 4GL。所以在进行中我称之为“嵌套”我想做什么,但我不知道如何用SQL / PLSQL实现它。 XML-File的示例我想要的方式:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article="12345">
<Artdesc>Black Shoes</Artdesc>
</Article="12345">
<Article="12346">
<Artdesc>White Shoes</Artdesc>
</Article="12346">
</ShoeShop>
用于创建XML-File的代码片段,它看起来像第一个示例:
PROCEDURE XML_TO_CLOB( pi_Query IN VARCHAR2,
pi_ParentNode IN VARCHAR2,
pi_ChildNode IN VARCHAR2 ) IS
qryCtx DBMS_XMLGEN.ctxHandle;
cResult CLOB;
BEGIN
-- Create new Context for the Query
qryCtx := DBMS_XMLGEN.newContext( pi_Query );
-- Set Parent and Child Node
DBMS_XMLGEN.setRowSetTag( qryCtx, pi_ParentNode );
DBMS_XMLGEN.SetRowTag( qryCtx, pi_ChildNode );
-- setNullHandling to show Tag also when the value is NULL
DBMS_XMLGEN.setNullHandling( qryCtx, DBMS_XMLGEN.EMPTY_TAG );
-- getXML in CLOB
cResult := DBMS_XMLGEN.getXML( qryCtx );
-- Put encoding to the "Header"
cResult := REPLACE( cResult, '<?xml version="1.0"?>', '<?xml version="1.0" encoding="ISO-8859-1" ?>' );
-- Close Context
DBMS_XMLGEN.closeContext( qryCtx );
-- Write the CLOB to a file on the server to work with the data in Forms 6i
DBMS_XMSLPROCESSOR.CLOB2FILE( cResult, 'ExampleDir', 'Example.xml' );
END;
非常感谢,
萨拉
答案 0 :(得分:1)
有一些使用DBMS_XMLGEN在文档中生成嵌套文档的示例。 Check out example 17-27。
Oracle解决方案涉及使用用户定义的类型来指定文档的形状,包括将作为属性而不是元素包含的列。这可能比您预期的更多基础设施。