「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プロシージャが正常に完了しました。