2017-08-17 15 views
0

現在、私は、プロダクション値のある本番Oracleデータベースのコピーがあるプロジェクトで作業しています。私はテストのものよりも多くのプロダクションレコードを持っており、私は重複を持つでしょう)。Oracle DBの値をテスト・データのセットに置き換えます

ここ

は私が何を探しています何のサンプルです:

Data Set Sample

任意の提案をいただければ幸いです。

+0

多分行を一致させるためにMOD(ROWNUM)を使用? – Randy

答えて

2

一つのアプローチは、このように、テストデータテーブルに元のデータを一致させるためにモジュロ演算を使用し、そのrowidで行に番号を付けるために、次のようになります。

merge into customer c 
using (
    with cte_customer as (
     select rowid xrowid, mod(row_number() over (order by rowid)-1,(select count(*) from test_data))+1 rownumber 
     from customer 
     order by rowid 
    ), cte_testdata as (
     select row_number() over (order by rowid) rownumber, first_name, last_name, email 
     from test_data 
     order by rowid 
    )    
    select c.xrowid, t.last_name, t.first_name, t.email 
    from cte_customer c 
    left outer join cte_testdata t on (t.rownumber = c.rownumber) 
    order by c.xrowid 
) u 
on (c.rowid = u.xrowid) 
when matched then update set 
    c.last_name = u.last_name, 
    c.first_name = u.first_name, 
    c.email = u.email 
+0

現在のテーブルとテストテーブルが全く異なるデータを含んでいるとすれば、これは大規模に複雑すぎませんか?なぜそこにあるデータを削除してそこに必要なデータを追加しないのですか? – Ben

+1

@ベン私は@Jeremyが私たちにテーブル構造の一部しか与えていないと思った。私の 'merge'がタスクを解決する方法では、テーブル内の他のカラムは元のままです。データウェアハウス/ ETLの世界では、このようなデータの難読化は珍しいことではありません。 –

+0

トーマス、あなたのアプローチがうまくいくと思います。しかし、 "顧客"テーブルには "テスト"テーブルよりも多くのレコードがあります。私の前提は、上記で書かれたものは、テストテーブルに格納されているレコードの量だけを更新するということです。 – Jeremy

関連する問題