現在、私は、プロダクション値のある本番Oracleデータベースのコピーがあるプロジェクトで作業しています。私はテストのものよりも多くのプロダクションレコードを持っており、私は重複を持つでしょう)。Oracle DBの値をテスト・データのセットに置き換えます
ここは私が何を探しています何のサンプルです:
任意の提案をいただければ幸いです。
現在、私は、プロダクション値のある本番Oracleデータベースのコピーがあるプロジェクトで作業しています。私はテストのものよりも多くのプロダクションレコードを持っており、私は重複を持つでしょう)。Oracle DBの値をテスト・データのセットに置き換えます
ここは私が何を探しています何のサンプルです:
任意の提案をいただければ幸いです。
一つのアプローチは、このように、テストデータテーブルに元のデータを一致させるためにモジュロ演算を使用し、その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
現在のテーブルとテストテーブルが全く異なるデータを含んでいるとすれば、これは大規模に複雑すぎませんか?なぜそこにあるデータを削除してそこに必要なデータを追加しないのですか? – Ben
@ベン私は@Jeremyが私たちにテーブル構造の一部しか与えていないと思った。私の 'merge'がタスクを解決する方法では、テーブル内の他のカラムは元のままです。データウェアハウス/ ETLの世界では、このようなデータの難読化は珍しいことではありません。 –
トーマス、あなたのアプローチがうまくいくと思います。しかし、 "顧客"テーブルには "テスト"テーブルよりも多くのレコードがあります。私の前提は、上記で書かれたものは、テストテーブルに格納されているレコードの量だけを更新するということです。 – Jeremy
多分行を一致させるためにMOD(ROWNUM)を使用? – Randy