SQL文に変数を埋め込んで実行するにはPL/SQLを使用する

PL/SQLではEXECUTE IMMEDIATE文で変数を持ったSQL文の実行ができる。 例を以下に示す。

DECLARE
  sql_stmt VARCHAR2(200);
  emp_id NUMBER := 100;
  emp_name VARCHAR2(100);
BEGIN
  sql_stmt := 'SELECT employee_name INTO emp_name FROM employees WHERE employee_id = :id';
  EXECUTE IMMEDIATE sql_stmt USING emp_id;
  DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name);
END;

上記の例では、まず実行するSQL文を格納する変数sql_stmtを宣言した後に、emp_id変数を宣言して、100を代入しています。次に、EXECUTE IMMEDIATE文を使用してSQL文を実行し、USING句を使用して、emp_id変数をSQL文内の:idパラメータに渡しています。最後に、DBMS_OUTPUT.PUT_LINE文によって、問い合わせ結果がコンソールに出力されています。

動的SQL文を実行する際はEXECUTE IMMEDIATE文を使用しますが、その際はセキュリティとSQLインジェクション攻撃への対策に十分に注意してください。バインド変数(上で示した例では:id)を使用すると、SQL文に直接変数値をつなぎ合わせるのではなく、変数値を置換できます。

bannerAds