三流備忘録OracleのSQL PL/SQL 関数 ついての備忘録
ホーム >> PL/SQL備忘録 >> カーソル(REF CURSOR)

カーソル(REF CURSOR)

解説

結果セットのポインタみたいなもの。
クライアントとの間で問い合わせの結果セットを渡すために使用できる。

宣言(戻り値型なし)

TYPE 変数名 IS REF CURSOR;

宣言(戻り値型あり)

TYPE 変数名 IS REF CURSOR RETURN 型;

%ROWTYPEを戻すカーソル変数

DECLARE

	TYPE hoge_type IS REF CURSOR RETURN tblHoge%ROWTYPE;
	hoge hoge_type;

BEGIN
 NULL;
END;

%TYPEを戻すカーソル変数

DECLARE

 
/* +++++++++++++++++++++++++++++++++++++++++++++++++++
 レコード変数のデータ型をあえる
++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
	hoge_rec tblHoge%ROWTYPE;
	TYPE hoge_type IS REF CUROSR RETURN hoge_rec%TYPE;
	hoge hoge_type;

BEGIN
 NULL;
END;

レコード型を戻すカーソル変数

DECLARE
 
	TYPE hogeRec IS (hogeid number,hogename varchar2(30));
	TYPE hoge_type IS REF CURSOR hogerec;
	hoge hoge_type;

BEGIN
 	NULL;
END;

カーソル変数からレコードへフェッチ

DECLARE

	TYPE hoge_type IS REF CURSOR RETURN tbl_Hoge%ROWTYPE;
	cur_hoge hoge_type;
	rec_hoge tbl_Hoge%rowtype;

BEGIN
 
	OPEN cur_hoge FOR SELECT * FROM tbl_Hoge WHERE hogeid BETWEEN 1 AND 10;

	LOOP
		FETCH cur_hoge INTO rec_hoge;
		
		EXIT WHEN cur_hoge%NOTFOUND;

		DBMS_OUTPUT.PUT_LINE(rec_hoge.hogeID);

	END LOOP;
	
	CLOSE cur_hoge;
END;

REF CURSORをオープンするストアド

 
/* +++++++++++++++++++++++++++++++++++++++++++++++++++
 パッケージ仕様部
++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
CREATE OR REPLACE PACKAGE HOGE_DATA
	
	--REF CURSOR
	TYPE hoge_type IS REF CURSOR;
	
	--プロシージャ
	PROCEDURE OPEN_HOGE_DATA( hoge_cv IN OUT  hoge_type , kbn INT);
END HOGE_DATA;
 
/* +++++++++++++++++++++++++++++++++++++++++++++++++++
 パッケージ本体
++++++++++++++++++++++++++++++++++++++++++++++++++++++ */

CREATE OR REPLACE PACKAGE BODY HOGE_DATA AS
	
	--プロシージャ
	PROCEDURE OPEN_HOGE_DATA( hoge_cv IN OUT  hoge_type , kbn INT) IS
	BEGIN
		
		--カーソルオープン
		IF kbn = 1 THEN

			OPEN hoge_cv FOR SELECT * FROM tbl_HOGE;

		ELSIF kbn = 2 THEN

			OPEN hoge_cv FOR SELECT * FROM tbl_HOGEHOGE;

		END IF;
	END;

END HOGE_DATA;