我正在使用Toad for oracle 12c。我需要将一个表和数据(40M)从一个方案复制到另一个方案(prod to test)。然而,有一个唯一的键(不是这个表的PK )叫做record_Id col,它的数据类似于3.000*19E15。大约2M行有相同的数字(我相信这是因为非常大的数字),这在prod中是唯一的。当我试图复制它时,它违背了该列的唯一密钥。我正在使用toad的"export data to another schema“功能来复制数据。
在prod中执行查询时
select count(*) from table_name 或
select count(distinct(record_id) from table_name这两个查询给出的数据数量完全相同。
我没有DBA权限。如何在不违反表的唯一键的情况下复制所有数据。
提前感谢!
发布于 2018-12-26 23:04:15
您可以使用UPSERT进行决策插入或更新,也可以为此编写小程序。
您可能会考虑使用NOT EXISTS,但您的数据量很大,并且可能不具有资源效率。
insert into prod_tab
select * from other_tab t1 where NOT exists (
select 1 from prod_tab t2 where t1.id = t2.id
); 发布于 2018-12-27 00:03:03
在Oracle中,您可以使用MERGE query来执行此操作。
对于每个数据行,以下查询将按如下方式进行:
record_id,则插入新记录更新现有记录
出于示例的目的,我假设表中还有另外两列:column1和column2。
MERGE INTO target_table t1
USING (SELECT * from source_table t2)
ON (t1.record_id = t2.record_id)
WHEN MATCHED THEN UPDATE SET
t1.column1 = t2.column1,
t1.column2 = t2.column2
WHEN NOT MATCHED THEN INSERT
(record_id, column1, column2) VALUES (t2.record_id, t2.column1, t2.column2)https://stackoverflow.com/questions/53933585
复制相似问题