Oracle PL/SQLのWhere Current Ofのサンプル

Oracle PL/SQLのWhere Current Ofのサンプルです。

目次

サンプル Where Current Of
  Where Current Ofでupdateする
  Where Current Ofでdeleteする

Where Current Of

Where Current of カーソル名

 

Where Current Ofでupdateする

Whereの条件にCurrent Ofを指定してupdateするサンプルです。

create or replace procedure TEST1
IS
  	CURSOR cur1 IS
		SELECT name,romaji FROM employee
		WHERE romaji like '%a%'
		FOR UPDATE;
	employee_rec  cur1%ROWTYPE;
BEGIN
	OPEN cur1;
	LOOP
		FETCH cur1 INTO employee_rec;
		EXIT WHEN cur1%NOTFOUND;

		UPDATE employee
		SET name2 = employee_rec.name,
		    romaji2 = employee_rec.romaji
		WHERE CURRENT OF cur1;
	END LOOP;
	CLOSE cur1;
    COMMIT;
EXCEPTION
WHEN OTHERS THEN
	dbms_output.put_line('SQLCODE = ' || SQLCODE);
    dbms_output.put_line('SQLERRM = ' || SQLERRM);
	ROLLBACK;
END;

3行目からはselect文のカーソルです。
6行目は、FOR UPDATEをつけています。WHERE CURRENT OFを使用するときは必須です。
11行目は、Fetchでカーソルからレコードを取得しています。
12行目は、カーソルのデータがない場合はループを終了します。
17行目は、whereの条件にcurrent of カーソルを指定しています。
select文で取得した1行ごとにupdate文で更新されます。

 

Where Current Ofでdeleteする

Whereの条件にCurrent Ofを指定してdeleteするサンプルです。

create or replace procedure TEST1
IS
  	CURSOR cur1 IS
		SELECT name,romaji FROM employee
		WHERE romaji like '%a%'
		FOR UPDATE;
	employee_rec  cur1%ROWTYPE;
BEGIN
	OPEN cur1;
	LOOP
		FETCH cur1 INTO employee_rec;
		EXIT WHEN cur1%NOTFOUND;

		Delete employee
		WHERE CURRENT OF cur1;
	END LOOP;
	CLOSE cur1;
    COMMIT;
EXCEPTION
WHEN OTHERS THEN
	dbms_output.put_line('SQLCODE = ' || SQLCODE);
    dbms_output.put_line('SQLERRM = ' || SQLERRM);
	ROLLBACK;
END;

3行目からはselect文のカーソルです。
6行目は、FOR UPDATEをつけています。WHERE CURRENT OFを使用するときは必須です。
15行目は、whereの条件にcurrent of カーソルを指定しています。
select文で取得した1行ごとにdelete文で更新されます。

関連の記事

Oracle PL/SQLのcommitとrollbackと例外処理

△上に戻る