首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在oracle中将所有约束和数据从一个模式复制到另一个模式

如何在oracle中将所有约束和数据从一个模式复制到另一个模式
EN

Stack Overflow用户
提问于 2018-12-26 22:49:26
回答 2查看 72关注 0票数 0

我正在使用Toad for oracle 12c。我需要将一个表和数据(40M)从一个方案复制到另一个方案(prod to test)。然而,有一个唯一的键(不是这个表的PK )叫做record_Id col,它的数据类似于3.000*19E15。大约2M行有相同的数字(我相信这是因为非常大的数字),这在prod中是唯一的。当我试图复制它时,它违背了该列的唯一密钥。我正在使用toad的"export data to another schema“功能来复制数据。

在prod中执行查询时

代码语言:javascript
复制
 select count(*) from table_name 

代码语言:javascript
复制
select count(distinct(record_id) from table_name

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

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

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-12-26 23:04:15

您可以使用UPSERT进行决策插入或更新,也可以为此编写小程序。

您可能会考虑使用NOT EXISTS,但您的数据量很大,并且可能不具有资源效率。

代码语言:javascript
复制
insert into prod_tab 
  select * from other_tab t1 where NOT exists (
     select 1 from prod_tab t2 where t1.id = t2.id
  ); 
票数 0
EN

Stack Overflow用户

发布于 2018-12-27 00:03:03

在Oracle中,您可以使用MERGE query来执行此操作。

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

  • 如果目标表中尚不存在源record_id,则插入新记录
  • ;否则,使用源值

更新现有记录

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53933585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档