2012年3月8日木曜日

Oracle 「行更新」を使って、特定カラムのみ更新する

「update ~ set row = ~」の書式は、カラムが大量にあるテーブルに対する更新を行うときのパフォーマンスアップには効果がある場合がありそうだが、いろいろ制約がある。

そのひとつが全カラムが更新対象であることだ。

例えば、「作成日時」なんてカラムがあった場合、この値は変更したくない。
そんなときはそのままじゃ使えない。

でも、発想の転換。
ビューを作れば、すべてのカラムを更新せずとも「update ~ set row = ~」の書式が使用できる。
もちろん、ビューの対象カラム以外の値は変更されない。

以下がそのサンプル。

=====
【テーブル・ビューの状態】
testtab(テスト用テーブル)
    key
    col1
    col2
    col3

testview(testtabのview)
    key
    col1
    col2

=====
【PL/SQLプログラム】
create or replace function  funcname
return number
is
 vdata testview%rowtype;
begin
 vdata.key  := 'keyvalue';
 vdata.col1 := 'after value1';
 vdata.col2 := 'after value2';
 update testview set row = vdata where key = vdata.key;
 return 0;
end;
/
=====

0 件のコメント:

コメントを投稿