三流備忘録OracleのSQL PL/SQL 関数 ついての備忘録
DBMS_SQL
説明
動的SQLの実行をする。
| OPEN_CURSOR | カーソルオープン |
| PARSE | SQL文解析 |
| 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;