検索
連載

PL/SQLでカーソルを使う(基本編)超入門「PL/SQL」(6)(3/3 ページ)

本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用していくための実践講座です。今回から「カーソル」について2回に分けて解説します。

Share
Tweet
LINE
Hatena
前のページへ |       

カーソル属性

 カーソル属性を使用すると、「取り出す行があるかどうか」「これまで何行取り出したのか」のような、現在のカーソルの状態を確認できます。そのため、カーソル属性で得られた結果に基づいて次の実行内容を決定できます。それでは、どのような属性があるのかを次の表で見てみましょう。

属性 意味
%NOTFOUND 直前のFETCH文が行を戻した場合はFALSE、行を戻さない場合はTRUE
%FOUND 直前のFETCH文が行を戻した場合はTRUE、行を戻さない場合はFALSE
%ROWCOUNT これまでに取り出した行数
%ISOPEN カーソルがオープンしている場合はTRUE、クローズしている場合はFALSE

 カーソル属性は次のように指定します。

<カーソル名><カーソル属性>
カーソル属性を指定する書式

 次のサンプルプログラムでは、%NOTFOUND属性、%ROWCOUNT属性を使用しています。

SQL> DECLARE
 2    CURSOR dept_cur IS SELECT * FROM dept;
 3    dept_rec dept_cur%ROWTYPE;
 4  BEGIN
 5    OPEN dept_cur;
 6      LOOP
 7        FETCH dept_cur INTO dept_rec;
 8        EXIT WHEN dept_cur%NOTFOUND;
 9          DBMS_OUTPUT.PUT_LINE(dept_cur%ROWCOUNT);
10      END LOOP;
11    CLOSE dept_cur;
12  END;
13  /
1
2
3
4

 %NOTFOUND属性を、EXIT WHEN文の条件として使用しています。カーソルDEPT_CURの結果セットは4行であるため、4回目のLOOP処理までは%NOTFOUND属性をFALSEと識別し、処理を続行します。その後、5回目のLOOP処理の際に結果セットから取り出す行がないため、%NOTFOUND属性がTRUEと識別し、LOOP処理を終了します。

 %ROWCOUNT属性は、カーソルの結果セットから取り出した行数をカウントし、その結果をDBMS_OUTPUT.PUT_LINEで表示するために使用しています。実行結果からは、カーソルの結果セットから4行を取り出したことが分かります(末尾の4行)。

 いかがでしたでしょうか。カーソル処理では複数のステップが必要になるため、難しく感じられた方もいるかもしれません。しかし、カーソルは多くの場面で使用しますので、この機会にしっかりと理解しておきましょう。

 次回は、カーソル処理をより効率的に行うための応用編になります。

筆者紹介

小笠原宏幸(おがさわら ひろゆき)

株式会社アシスト データベース技術本部所属。普段はOracle、PostgreSQL、JP1などの分野で研修講師を担当。また、書籍「SQL逆引き大全363の極意」(株式会社秀和システム)をはじめ、「これならわかるOracle超入門教室」(株式会社翔泳社)、「プロとしてのPL/SQL入門」(SBクリエイティブ株式会社)の共著も担当。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る