2016-08-31 5 views
0

私は複数の内側選択カーソルを持つ選択カーソル式を持っています。内側のカーソルが値を返すかどうかを確認するために、最も外側の選択カーソルをチェックインしたいと思いました。 「LIST_G_CATEGORY」カーソルの結果がnullであるかどうか、それがnullの場合、その行を表示しない場合 例えば、Cursor Expression(カーソルの選択)が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.S:クエリがここに投稿するために急いで構成されているため、列名の不一致を無視してください。

バージョン:Oracleの11グラムR2

+0

あなたは「急いで作った」が、これは実際のビジネスロジックを表していますか?スカラーカーソルのこのバロックネストの理由は何ですか? – APC

答えて

0

カーソルが空であるかどうかをチェックするためには、まずそれをfetch必要があります。

これは、あなたがcursorが空かないとき、それに応じて1または0を返しますクレート(おそらくSYS_REFCURSORを使用して)function可能性があることを意味 - しかし、あなたが行うためには、そのcursorリターンrowtypeに注意する必要がありますがそれ。

チェックこれは

oracle cursor expression

similar question on stackoverflow

check sys ref cursor is empty - stackoverflw

ref cursor rowcount questionを参照します。

関連する問題