「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));
表が作成されました。
SQL> create table userinfo_tbl(uno varchar(25),uname varchar(35),age number(2));
表が作成されました。
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行が作成されました。
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行が作成されました。
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;
/
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;
/
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プロシージャが正常に完了しました。
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プロシージャが正常に完了しました。
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プロシージャが正常に完了しました。