動的SQLを実行する(Oracle)

【動的SQLで単一行を取得する1】

declare
  test_rec test%rowtype;
  sql1 varchar2(2000);
begin

  sql1 := 'select * from test where data1 = :data1';
  execute immediate sql1 into test_rec using 100;
  dbms_output.put_line ('-- 取得データ --');
  dbms_output.put_line (test_rec.data1);
  dbms_output.put_line (test_rec.data2);

end;
/

【動的SQLで複数行を取得する(その1)】

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;
/

【動的SQLで複数行を取得する(その2)】

declare
  type cutype is ref cursor;
  cv cutype;
  rec テストm%rowtype;
begin

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

  loop
    fetch cv into rec;
    exit when cv%notfound;
    dbms_output.put_line (rec.キー);
  end loop;

  close cv;

end;
/

【動的SQLの更新結果を取得する】

declare
  sql1 varchar2(2000);
  ret1 number;
begin

  sql1 := 'update test set data2 = :data2 where data1 = :data1
    returning data2 into :ret1';
  execute immediate sql1 using 11, 100 returning into ret1;
  dbms_output.put_line ('-- 取得データ --');
  dbms_output.put_line (ret1);

end;
/

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-11 (木) 00:48:55 (3749d)