问:我有这么一个表: =========== TABLE1 temp1 varchar(10) temp2 varchar(10) temp3 varchar(10) temp4 varchar(10) temp5 varchar(10) temp6 varchar(10) 在这个表中,temp1 、temp2、 temp3、 temp4是主键 另外还有一个表 =========== TABLE2 temp1 varchar(10) temp2 varchar(10) temp3 varchar(10) temp4 varchar……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:我有这么一个表:
===========
TABLE1
temp1 varchar(10)
temp2 varchar(10)
temp3 varchar(10)
temp4 varchar(10)
temp5 varchar(10)
temp6 varchar(10)
在这个表中,temp1 、temp2、 temp3、 temp4是主键
另外还有一个表
===========
TABLE2
temp1 varchar(10)
temp2 varchar(10)
temp3 varchar(10)
temp4 varchar(10)
temp5 varchar(10)
temp6 varchar(10)
在这个表中,temp1、temp2、temp3、temp4、temp5是主键。
现在我想从表1拷贝所有的数据到表2中。问题是在表1中,temp5字段可以拥有相同的值,而在表2中,temp5是一个主键。请问这个问题该如何解决呢?
答:有一点我感觉奇怪,就是表的所有列都叫temp,类型和长度也都相同;这样的两个表似乎不太容易彼此映射。
如果列的命名果真如此,那为何不简单地将表1的主键列映射到表2中呢?比如:
Insert into table2 (
temp1, temp2, temp3, temp5, -- primary key
temp4, temp6 -– non-key columns
)
Select temp1, temp2, temp3, temp4, –- primary key
temp5, temp6 -– non-key columns
from table1;
一旦表2加载之后,你就可以弄明白该如何处理temp4与temp5了。
但如果你确实需要精确地匹配所有列,那么你可以将复制的行抛给其他表,然后分别决定它们的命运。可能这样的行也不会很多。
你可以选择下面的一种方法:
- 从表1中每次取出一行,然后将它们插入到表2中。捕获dup_val_on_index Exception然后将行抛给“exception”表。这样就可以和表1一样了。
- 暂时停止主键约束,加载行,然后重新开启主键约束,把行的urowid抛给一个exception表。但是要记住,除非你修复所有拷贝,否则主键就不存在。Exception表必须使用Oracle提供的脚本UTLEXPT1. SQL来创建。
作者
翻译
相关推荐
-
五个实用的SQL Server PowerShell脚本
Windows PowerShell为SQL Server数据库自动化任务、收集信息以及部署对象都操作提供了一个非常简单直接的方式。
-
Redis 2.6 Lua脚本功能实现分析
Redis脚本功能的实现代码放在源码的src/scripting.c 文件中,主要分为三部分:Lua嵌入Redis;EVAL和EVALSHA命令的实现;SCRIPT命令的实现。
-
案例分享:记一次MongoDB性能问题
最近忙着把一个项目从MySQL迁移到MongoDB,在导入旧数据的过程中,遇到了些许波折,犯了不少错误,但同时也学到了不少知识,遂记录下来。
-
如何运行Oracle数据库备份脚本
一个示例脚本是如何在无人操作的情况下,进行空闲时间的数据库备份的?Oracle专家分两个平台,进行了介绍。