トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-10 ランダムな列をupdate

SQLパズル

更新対象テーブルの、
Col1、Col2、Col3、Col4の4列のどれか1つを25%の確率で、-999に更新する。


データ作成スクリプト

create table 更新対象テーブル(
ColPK number(3),
Col1  number(3),
Col2  number(3),
Col3  number(3),
Col4  number(3),
primary key(ColPK));

begin
    execute immediate 'truncate table 更新対象テーブル';

    for i in 1..100 loop
        insert into 更新対象テーブル values(i,i,i,i,i);
    end loop;
    commit;
end;
/


SQL

update 更新対象テーブル a
set(Col1,Col2,Col3,Col4) =
(select
case when mod(abs(random),4) = 0 then -999 else Col1 end,
case when mod(abs(random),4) = 1 then -999 else Col2 end,
case when mod(abs(random),4) = 2 then -999 else Col3 end,
case when mod(abs(random),4) = 3 then -999 else Col4 end
from(select dbms_random.random() as random,b.RowID as Row_ID,
     Col1,Col2,Col3,Col4 from 更新対象テーブル b)
where a.RowID=Row_ID);


解説

dbms_randomパッケージのrandom関数を使うと、乱数を取得できます。

マニュアル(DBMS_RANDOM)
DBMS_RANDOMパッケージの資料