トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-160 各レコードをランダムに更新
SQLパズル
IsUpdatedテーブル
code1 code2
----- ----
1 1
1 1
1 1
WillUpdateテーブル
code1 code2
----- ----
1 1
2 2
3 3
IsUpdatedテーブルの各レコードを、
WillUpdateテーブルからランダムに選んだ1レコードで更新する
データ作成スクリプト
create table IsUpdated as
select 1 as code1 ,1 as code2 from all_catalog where RowNum <= 500;
create table WillUpdate as
select RowNum as code1 ,RowNum as code2 from all_catalog where RowNum <= 500;
SQL
declare
counter binary_integer := to_number(to_char(systimestamp,('FF2')));
begin
for rec in (select RowID as Row_ID from IsUpdated) Loop
update IsUpdated a
set (code1, code2)=(
select code1,code2
from WillUpdate
where RowID = (select distinct First_Value(RowID) over(order by dbms_random.value)
from WillUpdate))
where a.RowID = rec.Row_ID;
dbms_random.seed(to_number(to_char(systimestamp,('FF2')))+counter);
counter := counter + 1;
end Loop;
end;
/
--■■■確認用のSQL
select code1,code2,count(*)
from IsUpdated
group by code1,code2
order by code1,code2;
select avg(code1),avg(code2)
from IsUpdated;
解説
systimestampのミリ秒で、
乱数を初期化してます
DBMS_RANDOMの資料