OracleのPL/SQLのEXECUTEで、SQLを実行することが出来る。
EXECUTE IMMEDIATE SQL文の文字列;
SQL文の文字列を指定することで、そのSQLを実行する。
begin EXECUTE IMMEDIATE 'truncate table テーブル名'; end;
--変数にSQL文を書いて実行する例 declare sql_stmt varchar2(200); begin sql_stmt := 'truncate table テーブル名'; EXECUTE IMMEDIATE sql_stmt; end;
EXECUTE IMMEDIATE SQL文の文字列 USING 値…;
USING句を指定することで、SQL文内のバインド変数に値をセットすることが出来る。
begin
EXECUTE IMMEDIATE 'update EMP set SAL = SAL + :1'
USING 100;
end;
--変数の使用例
declare
bonus number;
begin
bonus := 100;
EXECUTE IMMEDIATE 'update EMP set SAL = SAL + :1'
USING bonus;
end;
--複数パラメーターの例 begin EXECUTE IMMEDIATE 'update EMP set SAL = SAL + :1 where SAL < :2' USING 10, 12000; end;
SQL> var v1 number SQL> var v2 varchar2(10) SQL> exec :v1 := 10; SQL> exec :v2 := 'SCOTT'; SQL> begin 2 EXECUTE IMMEDIATE 'update EMP set SAL = SAL + :1 where ENAME = :2' 3 USING :v1, :v2; 4 end; 5 /
EXECUTE IMMEDIATE SELECT文の文字列 INTO 変数名…;
INTO句を指定することで、SELECT文の実行結果を変数にセットすることが出来る。
SQL> var v1 number SQL> var v2 varchar2(10) SQL> var v3 number SQL> exec :v2 := 'SCOTT'; SQL> begin 2 EXECUTE IMMEDIATE 'select EMPNO,SAL from EMP where ENAME=:1' 3 INTO :v1, :v3 USING :v2; 4 end; 5 / SQL> print V1 ---------- 7788 V2 -------------------------------- SCOTT V3 ---------- 12932
EXECUTE IMMEDIATE SQL文の文字列 RETURNING BULK COLLECT INTO 変数名;
RETURNING句を指定することで、値を返すSQL文の実行結果を変数にセットすることが出来る。
declare type NumberList is table of number(4); empnos NumberList; begin EXECUTE IMMEDIATE 'update EMP set SAL=SAL+1 where ENAME=:1 returning EMPNO into :2' USING 'SCOTT' RETURNING BULK COLLECT INTO empnos; end;