PL/SQLのカーソル(CURSOR)
検索したデータを変数に代入する方法の一つとして、カーソル(CURSOR)があります。カーソルは、SELECT文の検索結果が複数行の場合でも処理できます。カーソルは複数行を一度に変数に代入するのではなく、1行ずつアクセスし1行ずつ変数に代入して処理を行います。
◆カーソル(CURSOR)の書式
【書式】カーソルの定義
CURSOR <カーソル名> IS <問い合わせ文>;
【書式】カーソルの実行(OPEN文)
OPEN <カーソル名>;
【書式】データの取り出し(FETCH INTO文)
FETCH <カーソル名> INTO <変数名> ;
【書式】カーソル終了(CLOSE文)
CLOSE <カーソル名> ;
|
以下にカーソル(CURSOR)の使用例を示します。
SQL> SET ECHO ON
SQL> SET SERVEROUTPUT ON
SQL> @cursor_sample
SQL> DECLARE
2 CURSOR tcur IS SELECT username,account_status from dba_users;
3 t2cur tcur%ROWTYPE;
4 BEGIN
5 OPEN tcur;
6 LOOP
7 FETCH tcur INTO t2cur;
8 EXIT WHEN tcur%NOTFOUND;
9 DBMS_OUTPUT.PUT_LINE(t2cur.username || ' ' || t2cur.account_status);
10 END LOOP;
11 CLOSE tcur;
12 END;
13 /
SYSTEM OPEN
SYS OPEN
ANONYMOUS OPEN
APEX_PUBLIC_USER LOCKED
APEX_040000 LOCKED
FLOWS_FILES LOCKED
OUTLN EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
XDB EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
HR EXPIRED & LOCKED
PL/SQLプロシージャが正常に完了しました。
SQL>
SQL>
|
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
カーソルの処理で必要があった「OPEN文」、「FETCH文」、「CLOSE文」や取り出したデータを格納するための変数定義がカーソルFORループを使用することで自動化され処理全体が簡略化できます。以下にカーソルFORループについて記載します。
◆カーソルFORループの書式
【書式】カーソルの定義
CURSOR <カーソル名> IS <問い合わせ文>;
【書式】カーソルFORループ
FOR <ループ索引名> IN <カーソル名> LOOP
<処理名>
END LOOP;
|
以下にカーソルFORループの使用例を示します。
SQL> SET ECHO ON
SQL> SET SERVEROUTPUT ON
SQL> @cursorfor_sample
SQL> DECLARE
2 CURSOR tcur IS SELECT username,account_status from dba_users;
3 BEGIN
4 FOR t2cur IN tcur LOOP
5 DBMS_OUTPUT.PUT_LINE(t2cur.username || ' ' || t2cur.account_status);
6 END LOOP;
7 END;
8 /
SYSTEM OPEN
SYS OPEN
ANONYMOUS OPEN
APEX_PUBLIC_USER LOCKED
APEX_040000 LOCKED
FLOWS_FILES LOCKED
OUTLN EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
XDB EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
HR EXPIRED & LOCKED
PL/SQLプロシージャが正常に完了しました。
SQL>
|
|
スポンサードリンク
|