三流備忘録OracleのSQL PL/SQL 関数 ついての備忘録

DBMS_SQL

説明

動的SQLの実行をする。

OPEN_CURSORカーソルオープン
PARSESQL文解析
EXECUTE実行
CLOSE_CURSORカーソルクローズ
BIND_VARIABLE所定の変数にバインド
DEFINE_COLUMN指定されたカーソルから選択され、SELECT文だけで使用される列を定義
COLUMN_VALUE所定の位置のカーソル要素の値を戻す
FETCH_ROAWS所定のカーソルから行をフェッチ
IS_OPEN指定されたカーソルがOPENならTRUE

PROCEDURE TestDBMS_SQL
(
	I_ID			VARCHAR2
)  
IS
	--動的カーソル
	DCSR1 INTEGER;

	ROWS_PROCESSED INTEGER;

	FLG NUMBER :=0;
	WKSQL 		VARCHAR(1000);
	WKHOGENAME	VARCHAR(50);

BEGIN
	
	WKSQL := 'SELECT HOGENAME FROM T_HOGE WHERE HOGEID = ''' || I_ID ||''';

	--オープン
	DCSR1 := DBMS_SQL.OPEN_CURSOR;

	--SQL設定
	DBMS_SQL.PARSE(DCSR1,WKSQL,DBMS_SQL.V7);

	--列定義
	DBMS_SQL.DEFINE_COLUMN(DCSR1,1,WKHOGENAME,50)
	
	ROWS_PROCESSED := DBMS_SQL.EXECUTE(DCSR1);
	
	LOOP
		IF DBMS_SQL.FETCH_ROWS(DCSR1) > 0 THEN

			FLG := 1;

			DBMS_SQL.COLUMN_VALUE(DCSR1,1,WKHOGENAME);
			
			DBMS_OUTPUT.PUTLINE(WKHOGENAME);
		ELSE
			EXIT;
		END IF;
		
	END LOOP;
	--クローズ
	DBMS_SQL.CLOSE_CURSOR(DCSR1);
	
	RETURN FLG;
	
END;