2010-04-12 72 views
1

我已經得到了以下在我的Oracle程序之一,我用它來生成XML光標循環;如何在循環開始/結束時只執行一次?

-- v_client_addons is set to '' to avoid null error 
    OPEN C_CLIENT_ADDONS; 
    LOOP 
    FETCH C_CLIENT_ADDONS INTO CLIENT_ADDONS; 
    EXIT WHEN C_CLIENT_ADDONS%NOTFOUND; 
    BEGIN 
     v_client_addons := v_client_addons || CLIENT_ADDONS.XML_DATA; 
    END; 
    END LOOP; 
    CLOSE C_CLIENT_ADDONS; 

    -- Do something later with v_client_addons 

循環應該通過我的光標,並挑選出所有的XML值的顯示,如:

<add-on name="some addon"/> 
<add-on name="another addon"/> 

我想達成什麼是有這個循環中的XML開始/結束標記,所以我想有以下輸出

<addons> 
    <add-on name="some addon"/> 
    <add-on name="another addon"/> 
</addons> 

哪有我這樣做沒有每行後面的<addons>標籤?如果遊標中沒有插件(光標爲空),那麼我想跳過這一部分

回答

2

檢查v_client_addons的長度。如果它大於0,你實際上是在追加一些東西。然後用它的孩子創建父母標籤,否則就忽略它。

2

如何使用SQL生成整個XML,而不是遍歷遊標?

SELECT XMLELEMENT("addons", XMLAGG(C.XML_DATA)) INTO v_client_addons 
FROM CLIENT_ADDON_TABLE C;