「Oracle」PL/SQLでカーソルのOPEN~FETCH処理を行う方法

環境
Oracle 11.2.0.1.0

1.テーブルを作成します

SQL> create table userinfo_tbl(uno varchar(25),uname varchar(35),age number(2));

表が作成されました。

2.データを挿入します

SQL> insert into userinfo_tbl values('1001','user01',23);

1行が作成されました。

SQL> insert into userinfo_tbl values('2002','user02',33);

1行が作成されました。

SQL> insert into userinfo_tbl values('3003','user03',44);

1行が作成されました。

3.カーソルの定義
CURSOR カーソル名 IS
SELECT * FROM テーブル名;

カーソルのROWTYPEを設定します
rec カーソル名%ROWTYPE;

カーソルをOPENします
OPEN カーソル名;
LOOP
FETCH カーソル名 INTO rec;

SQL構文

DECLARE
    --カーソルの定義
    CURSOR cftcur IS
    SELECT * FROM userinfo_tbl;

    --カーソルのROWTYPEを設定
    rec cftcur%ROWTYPE;

  BEGIN
    --カーソルをOPENする
    OPEN cftcur;
     --カーソルをループする
    LOOP
      --カーソルから1行取り出しrecに格納する
     FETCH cftcur INTO rec;

      --データが存在しない場合はループを抜ける
      EXIT WHEN
        cftcur%NOTFOUND;

      --取得したデータを表示する
      DBMS_OUTPUT.PUT_LINE('UNO ⇒' || rec.UNO);
      DBMS_OUTPUT.PUT_LINE('UNAME ⇒' || rec.UNAME);
      DBMS_OUTPUT.PUT_LINE('AGE ⇒' || rec.AGE);

    END LOOP;

    --カーソルをCLOSEする
    CLOSE cftcur;

  END;
  /

操作例

SQL > set serveroutput on
SQL> DECLARE
  2    --カーソルの定義
  3    CURSOR cftcur IS
  4    SELECT * FROM userinfo_tbl;
  5
  6    --カーソルのROWTYPEを設定
  7    rec cftcur%ROWTYPE;
  8
  9  BEGIN
 10    --カーソルをOPENする
 11    OPEN cftcur;
 12
 13    --カーソルをループする
 14    LOOP
 15      --カーソルから1行取り出しrecに格納する
 16      FETCH cftcur INTO rec;
 17
 18      --データが存在しない場合はループを抜ける
 19      EXIT WHEN
 20        cftcur%NOTFOUND;
 21
 22      --取得したデータを表示する
 23      DBMS_OUTPUT.PUT_LINE('UNO ⇒' || rec.UNO);
 24      DBMS_OUTPUT.PUT_LINE('UNAME ⇒' || rec.UNAME);
 25      DBMS_OUTPUT.PUT_LINE('AGE ⇒' || rec.AGE);
 26
 27    END LOOP;
 28
 29    --カーソルをCLOSEする
 30    CLOSE cftcur;
 31
 32  END;
 33  /
UNO ⇒1001
UNAME ⇒user01
AGE ⇒23
UNO ⇒2002
UNAME ⇒user02
AGE ⇒33
UNO ⇒3003
UNAME ⇒user03
AGE ⇒44

PL/SQLプロシージャが正常に完了しました。

 

Oracle

Posted by arkgame