ちょっと前に動的SQLを使う機会があったので、ちょっと調べてみることに。
参考サイトとして
動的PL/SQL
8 動的SQLのコーディング
で、すごくおおまかに書くと、以下のような感じ
DECLAR lc_hoge INTGER; --カーソル変数名を宣言 lv_SQL VARCHAR2(1000); --動的SQL文 lb_RET BINARY_INTEGER; BEGIN --カーソルをオープンします lc_hoge := DBMS_SQL.OPEN_CURSOR;
--動的SQL文を記述します lv_SQL := 'INSERT foo(create_date)values(sysdate)';
--動的SQL文を解析します DBMS_SQL.PARSE(lc_hoge, v_stmt_str,DBMS_SQL.NATIVE);
--動的SQL文を実行します lb_RET := DBMS_SQL.EXECUTE(lc_hoge);
--カーソルをクローズします DBMS_SQL.CLOSE_CURSOR(lc_hoge); END; |
これで基本的にいけるはず、ただ、SQLインジェクションと動的バインディングは考慮されていないので、それは今後、検証していきたいと思います。
最初、動的SQLと出会ったのは、先輩社員が持っていた黒本のPL/SQL編でした。
読んだ時、ファンクション、プロシージャー、パッケージという流れで、その流れをきるような感じで、動的SQLの記述があったことは覚えていたのですが、文法を忘れてしまいました。
やっぱ日々使わないと忘れちゃうなー。。。
0 コメント:
コメントを投稿