我将Toad用于oracle 12c。我需要将一个表和数据(40M)从一个shcema复制到另一个(进行测试)。但是,有一个唯一的键(不是该表的PK)称为record_Id col,它具有类似3.000 ******* 19E15的数据。大约2M行具有相同的编号(我相信是因为数量很大),在生产中是唯一的。当我尝试将其复制为紫罗兰色时,该列的唯一键。我正在使用蟾蜍“将数据导出到另一个架构”功能来复制数据。
当我在产品中执行查询时
select count(*) from table_name
OR
select count(distinct(record_id) from table_name
两个查询都给出完全相同数量的数据。
我没有DBA权限。如何在不违反表的唯一键的情况下复制所有数据。
提前谢谢!
答案 0 :(得分:0)
您可以使用UPSERT
进行决定性的INSERT或UPDATE,也可以为此编写小型过程。
您可能会考虑使用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
);
答案 1 :(得分:0)
在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)