2012-09-25 84 views
2

我使用Oracle 11g(11.1.0.7.0),我必須創建查詢的XML文件。我在Forms 6中使用這個文件,用戶希望能夠在表單中按下一個按鈕的時候創建XML文件,所以我有一個PL/SQL包,它創建了一個包含XML數據的CLOB文件服務器和Forms 6i我讀這行文件行(UTL_FILE.FOPEN讀取,UTL_FILE.GET_LINE行)和TEXT_IO.PUT_LINE我在客戶端計算機上寫入文件。 這工作很好,但我有一個XML文件的問題。 現在它看起來像這樣(的值是例子!):如何使用Oracle 11g/DBMS_XMLGEN創建嵌套的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的文件我多麼希望得到它:

<?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的文件怎麼看起來像第一個例子:

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; 

非常感謝,

Sarah

+0

兩個公佈的輸出之間的唯一區別在於'Artnumber'從它自己的權利元素轉變爲'Article'的屬性。還有其他的改變嗎? – APC

回答

1

有一些使用DBMS_XMLGEN在文檔中生成嵌套文檔的示例。 Check out example 17-27

Oracle解決方案涉及使用用戶定義的類型來指定文檔的形狀,包括將作爲屬性而不是元素包含的列。這可能比你期望的更多的基礎設施。