OracleのEXECUTE IMMEDIATEを使用して動的クエリを実行する方法


OracleのEXECUTE IMMEDIATEステートメントは、実行時に動的なSQLクエリを実行するための便利な機能です。この記事では、EXECUTE IMMEDIATEの基本的な使用方法と、いくつかのコード例を紹介します。

まず、EXECUTE IMMEDIATEステートメントの基本構文を見てみましょう。

EXECUTE IMMEDIATE <SQL文>;

<SQL文>の部分には実行したい動的なSQLクエリを記述します。このクエリは実行時に評価され、実行されます。

例えば、以下のような動的なクエリを実行することができます。

DECLARE
  v_emp_id NUMBER := 100;
  v_sql VARCHAR2(1000);
BEGIN
  v_sql := 'SELECT * FROM employees WHERE employee_id = ' || v_emp_id;
  EXECUTE IMMEDIATE v_sql;
END;

上記の例では、変数v_emp_idの値を使用して動的なSELECTクエリを生成し、EXECUTE IMMEDIATEステートメントで実行しています。このようにすることで、実行時にクエリの内容を動的に決定することができます。

また、EXECUTE IMMEDIATEステートメントでは、変数をバインドすることもできます。以下はその例です。

DECLARE
  v_emp_id NUMBER := 100;
  v_sql VARCHAR2(1000);
  v_result NUMBER;
BEGIN
  v_sql := 'SELECT salary INTO :result FROM employees WHERE employee_id = :emp_id';
  EXECUTE IMMEDIATE v_sql USING OUT v_result, v_emp_id;
  DBMS_OUTPUT.PUT_LINE('Salary: ' || v_result);
END;

上記の例では、変数v_resultとv_emp_idをバインド変数として使用しています。バインド変数は、クエリ内のパラメータとして使用されます。

このようにして、EXECUTE IMMEDIATEステートメントを使用して動的なSQLクエリを実行することができます。この機能を活用することで、柔軟性のあるプログラムを作成することができます。