2009/03/10

[oracle]動的SQL

ちょっと前に動的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 コメント:

コメントを投稿