用一组测试数据替换 Oracle DB 中的值
Replace Values in Oracle DB with set of test data
我目前正在从事一个项目,其中我有一个生产 Oracle 数据库的副本,其中包含一些我想用一组测试值替换的生产值(假设我的生产记录多于测试记录我会有重复的)。
这是我想要做的事情的示例:
如有任何建议,我们将不胜感激。
一种方法是按 rowid
对行进行编号,然后使用模运算将原始数据与测试数据 table 相匹配,如下所示:
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
我目前正在从事一个项目,其中我有一个生产 Oracle 数据库的副本,其中包含一些我想用一组测试值替换的生产值(假设我的生产记录多于测试记录我会有重复的)。
这是我想要做的事情的示例:
如有任何建议,我们将不胜感激。
一种方法是按 rowid
对行进行编号,然后使用模运算将原始数据与测试数据 table 相匹配,如下所示:
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