0

我将 Toad 用于 Oracle 12c。我需要将一个表和数据(40M)从一个 shcema 复制到另一个(测试产品)。但是,有一个名为 record_Id col 的唯一键(不是此表的 PK),其中包含类似 3.000*******19E15 的数据。大约 2M 行具有相同的数字(我相信这是因为数字非常大),这在产品中是独一无二的。当我尝试复制它时,紫罗兰色是那个 col 的唯一键。我正在使用蟾蜍“将数据导出到另一个模式”功能来复制数据。

当我在产品中执行查询时

 select count(*) from table_name 

或者

select count(distinct(record_id) from table_name

两个查询都给出了完全相同数量的数据。

我没有 DBA 权限。如何在不违反表的唯一键的情况下复制所有数据。

提前致谢!

4

2 回答 2

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
  ); 
于 2018-12-26T15:04:15.487 回答
0

在 Oracle 中,您可以使用MERGE查询

对于每个数据行,以下查询按如下方式进行:

  • 如果源record_id在目标表中尚不存在,则插入一条新记录
  • 否则,现有记录将使用源值更新

为了示例的目的,我假设表中还有另外两列:column1column2

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)
于 2018-12-26T16:03:02.767 回答