2016-08-31 2 views
0

여러 개의 내부 선택 커서가있는 선택 커서식이 있습니다. 안쪽 커서가 어떤 값을 반환하는지 아닌지 가장 외부의 선택 커서를 확인하고 싶었습니다. "LIST_G_CATEGORY"커서의 결과가 null인지, 그것이 null 인 경우 그 행을 표시하지 않는 경우 예.,커서 식 (커서 선택)이 null을 반환하는지 확인하는 방법?

SELECT 
CURSOR 
    (SELECT 
    CURSOR 
    (SELECT c.cat_name category , 
     CURSOR 
     (SELECT 
     CURSOR 
      (SELECT grp.grpng 
      GROUPING , 
          grp.action_group action_group , 
      CURSOR 
       (SELECT 
       CURSOR 
       (SELECT header_id , 
         order_no , 
         cust_name , 
         cust_phone , 
         org , 
         status `enter code here`, 
         reason 
        FROM headers h 
        WHERE h.header_id = da.header_id) "G_HEADER" 
       FROM dual) "LIST_G_HEADER" 
      FROM action_group grp 
      WHERE grp.grpng = da.grpng 
       AND grp.action_grp = da.action_grp) "G_ACTION" 
     FROM action_rep da 
     WHERE da.org = 'test' 
      AND da.cat_id = c.cat_id 
     ORDER BY category, 
     GROUPING, 
        reason) "LIST_G_ACTION_GROUP" 
     FROM dual) "G_CATEGORY" 
    FROM dual) "LIST_G_CATEGORY" , 
     c.category_name 
FROM cat c 
ORDER BY c.cat_name 

나는 확인하기 위해 검사를 넣어해야합니다. P .: 쿼리가 여기에 게시되기 위해 서두르지 않기 때문에 열 이름 불일치를 무시하십시오.

버전 : 오라클 11g R2

+0

"서두르다"하지만 이것은 실제 비즈니스 논리를 나타냅니다? 스칼라 커서의 바로크 중첩의 이유는 무엇입니까? – APC

답변

0

위해 하나가 먼저 fetch한다, 커서가 빈 여부 여부를 확인합니다.

즉, 그럴 수 상자 function cursor이 비어 있거나하지 않을 경우, 그에 따라 1 또는 0가 반환 (아마도 SYS_REFCURSOR 사용) - 수행하기 위해,하지만 당신은 rowtype cursor 반환을 알고 있어야합니다 그.

확인이

oracle cursor expression,

similar question on stackoverflow,

check sys ref cursor is empty - stackoverflw,

ref cursor rowcount question를 참조합니다.