2010-04-12 6 views
1

나는 나의 오라클 절차 중 하나에 다음있어, 내가 같은 표시 할 XML 값을 모두 내 커서를 이동하고 밖으로 선택해야 XML을커서 루프; 루프 1 시작/끝에서 무언가를 수행하는 방법은 무엇입니까?

-- 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 

루프를 생성하는 데 사용하고 있습니다 : 내가 달성하고자하는 어떤

<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;