OracleのEXECUTE IMMEDIATE 動的SQL【PL/SQL】

動的SQL EXECUTE IMMEDIATE(PL/SQL)

OracleのPL/SQLで動的SQL(SQL文を変数で作成)を実行するには、「EXECUTE IMMEDIATE」で実行します。

テーブル名、列名、値などが可変で決まった値ではなくプログラム中で組み立てていく場合に動的SQLは便利です。

例1. バインド変数なしパターン

ここでは事前に変数「vSql」にSQLを文字列で作成しておきます。そのSQLを「EXECUTE IMMEDIATE」で実行するだけです。

例2. バインド変数あり

こちらはバインド変数で動的SQLを作成するパターンです。

SQLにバインド変数(:ENO,:ENAME)を定義しておき、「EXECUTE IMMEDIATE」で実行する際に「USING」のあとに変数をそれぞれ割り当てます。「USING」のあとに記述する順番はバインド変数の定義順になります。

例3. SELECTの結果を取得

こちらは動的SQL「vSql」を作成し、SELECTの結果を「vEmpName」に取得しました。SELECTの結果は「INTO」のあとに定義された変数「vEmpName」に取得できます。

例4. SELECTの結果を取得(複数レコード)

ここでは動的SQL「vSql」を作成し、SELECTの結果を取得するパターンです。例3ではSELECTの結果は単一行でしたが、ここでは複数行です。

複数行のSELECTはカーソルを使用します。カーソルを使用してループで回して変数としてSELECTの結果を取り出します。

以上、Oracleの動的SQLを実行する「EXECUTE IMMEDIATE」でした。

コメント

  1. エース より:

    パッケージ以外の方法ははじめてです
    うまくいきました 助かりました コミット必要なんですね

    • Oracleマスター より:

      コミットは暗黙的コミットがされるはずなんですが、
      効かないときのためにつけてあります。