2010-04-12 109 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;