Sql 光标循环;如何仅在循环开始/结束时执行一次?

Sql 光标循环;如何仅在循环开始/结束时执行一次?,sql,plsql,loops,oracle10g,cursor,Sql,Plsql,Loops,Oracle10g,Cursor,在我的一个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 ||

在我的一个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>


如何在每行后面都没有
标记的情况下执行此操作?如果光标中没有加载项(光标为空),那么我想跳过这一部分,检查v_client_加载项的长度。如果它大于0,则实际显示了某个内容。然后创建父标记及其子标记,否则忽略它。

检查v\u client\u插件的长度。如果它大于0,则实际显示了某个内容。然后创建父标记及其子标记,否则忽略它。

使用SQL生成整个XML,而不是在光标上循环,怎么样

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

使用SQL生成整个XML,而不是在游标上循环,怎么样

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