DB/Oracle/PLSQL/データベース連携

Top / DB / Oracle / PLSQL / データベース連携

目次

PL/SQL から Oracle Database を操作する。つまりは中に SQL 文を埋め込むお話。


SELECT

テーブルからのデータの検索。そして検索結果を変数に放り込む。

以下のサンプルのように記述する場合、SELECT 文の結果は、必ず 1 行でなければならないので注意。複数件のデータを取得して扱う場合は、カーソルの使用が必須。

  • SELECT
    declare
        v_hoge foo.hoge%type;
        v_fuga foo.fuga%type;
        v_piyo foo.piyo%type;
        v_sum  number;
    begin
        -- SELECT した結果の各列をそれぞれ変数に格納する
        -- 返される行が 1 行になるように絞り込みが必須
        select hoge, fuga, piyo
          into v_hoge, v_fuga, v_piyo
          from foo
          where bar = 100;
    
        -- グループ関数の結果は 1 行なのでいろいろ活用できる
        select sum(hoge)
          into v_sum
          from foo;
    end;
    /
    

変数のネーミング規則に注意すること。テーブルの列名と同じ変数を宣言してしまうと select 文の where 句であいまいな状態になってエラーが出る。

  • ダメな例
    declare
        hoge foo.hoge%type;
        fuga foo.fuga%type := 100;
    begin
        select hoge
          into hoge
          from foo
          -- fuga が列名なのか変数なのかわからないのでエラー
          where fuga = fuga;
    end;
    /
    

UPDATE、INSERT、DELETE、MERGE

これはもうそのまま書くだけ。いまさら書くまでもないので割愛。

COMMIT、ROLLBACK

これもそのまま書くだけ。これも割愛。

根本的な話として、そもそも COMMIT するのを忘れるとか、そういうアレなことをしないようにしようね、と。

ROLLBACK は例外処理に入れることが多いらしい。


Last-modified: 2011-11-08 (火) 15:18:07 (2264d)