動的SQL(1)


ITコーディネータのシュウです。

IMG_0895

娘がこの夏にボランティアの関係でカンボジアに行ってきたときに撮った写真です。

写真はメコン川で、中国チベット高原を源流としてミャンマー・ラオス国境、タイ・ラオス国境、カンボジア・ベトナムを通り南シナ海に抜ける、世界でも有数の国際河川の一つです。
カンボジアではこの夏も、豪雨のためメコン川流域で洪水が起きて、大変だったようです。
娘が訪問した村では、下の写真のように、水害で家の下のほうは水につかってしまい、船にたまった水をかきだしている様子を撮っています。(どの家も交通手段として船を持っているとのこと)
日本も台風や地震、火山噴火など様々な災害が起きており、犠牲になった方のご冥福を祈るばかりですが、世界でもいろいろと災害があって、その中で暮らして行かなければならないので、苦労が多いですね。

IMG_1042

<本日の題材>
動的SQL(Oracle)

通常のSQLでは、UPDATEやINSERTなどの処理をどの表のどの項目に対して行うのか、というのがあらかじめ明確になっているのですが、一部のケースでは、様々なSQL文を実行時に作成、またはパラメータとして受けて処理を行うという場合があります。
この場合は、SQL文の構成は実行時まで明確ではなく、実行のたびに変わる可能性があり、これを動的SQLといいます。この動的SQLは実行時にプログラムに入力、または作成される文字列に格納されるかたちになります。

動的SQLを実行する方法としては、EXECUTE IMMEDIATE文を使用する方法、カーソル変数を使用する方法などがありますが、今回は、EXECUTE IMMEDIATE文を使用する方法を取り上げます。

例)パラメータとして、削除するテーブル名を渡すプロシージャ(動的なDDL文)

CREATE OR REPLACE PROCEDURE truncate_table(tab_name VARCHAR2)
IS
Sql_stmt VARCHAR2(100) := 'TRUNCATE TABLE '|| tab_name;
BEGIN
EXECUTE IMMEDIATE Sql_stmt;
END;
/

テーブル:商品マスタのデータを削除します。
その前に、データを確認

SELECT * FROM 商品マスタ;
商品マスタ

プロシージャの実行
パラメータとして、「商品マスタ」を渡します。

EXECUTE truncate_table(‘商品マスタ’);
execute1

SELECT COUNT(*) FROM 商品マスタ;
execute_結果1

データが1件もなくなり、truncate文が実行されたことが確認できました。
今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>