Oracleで動的SQLを実行する

Oracle PL/SQL 編9 - 動的 SQL、EXECUTE IMMEDIATE、using、into、returning - SAK Streets

「EXECUTE IMMEDIATE 」を利用すると、任意の文字列をSQLとして実行することができる。

execute immediate 'select sysdate from dual';
execute immediate 'drop table test';

バインド変数を利用する場合:

declare
  sql1 varchar2(2000);
begin

  sql1 := 'insert into test values (:data1, :data2)';
  execute immediate sql1 using 100, 200;

end;
/
declare
  data1 number;
  data2 number;
  sql1 varchar2(2000);
begin

  data1 := 100;
  data2 := 200;
  sql1 := 'insert into test values (:data1, :data2)';
  execute immediate sql1 using data1, data2;

end;
/

変数に実行結果を入れる(単一行であること):

execute immediate 'select sysdate from dual' into testDate;

カーソルに実行結果を入れる

declare
  type cutype is ref cursor;
  cv cutype;
  item1 テストm.キー%type;
begin

  open cv for
    'select キー from テストm where キー like :data1'
    using 'a%';

  loop
    fetch cv into item1;
    exit when cv%notfound;
    dbms_output.put_line (item1);
  end loop;

  close cv;

end;
/