@634

Oracle PL/SQL - 動的SQL(exccute immediate)

Advertisement

DDL の実行

execute immediate SQL文[or PL/SQLブロック]

例:データベース作成
declare
begin
    execute immediate 'create table db1 (name char(2))';
end;
/

into 句の使用

execute immediate 内の select 文が値をひとつだけ戻す場合、into 句で指定した変数に値を格納することができる。

declare
    wk_name varchar2(50);

begin
    execute immediate 'select 名前 from プロフィール where 社員番号 = 100' into wk_name;
    dbms_output.put_line(wk_name);
end;

動的 SQL の実行

条件に変数を使う場合 ||(連結演算子)を使用する
declare
    wk_name varchar2(50);
    wk_項目 varchar2(20) := '名前';
    
begin
    execute immediate 'select ' || wk_項目 || ' from プロフィール where 社員番号 = 100' into wk_name;
    dbms_output.put_line(wk_name);
end;

using

declare
    sql_stmt varchar2(200);
begin
    sql_stmt := 'update プロフィール set 名前 = :v1 where 社員ID = :v2';
    execute immediate sql_stmt using 'マメタロウ', 100;
    commit;
end;

動的SQL + カーソル

declare
    sql_stmt varchar2(200);
    wk_grp varchar2(5);
    wk_name varchar2(30);

    type cursor_type is ref cursor;
    cur_name cursor_type;
begin
    wk_grp := '1u';

    open cur_name for 'select 名前 from 社員表 where 所属グループ = :v1' using wk_grp;
    loop
        fetch cur_name into wk_name;
        exit when cur_name%notfound;
        dbms_output.put_line(wk_name);
    end loop;
    close cur_name;
end;

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール

ビリヤード