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