首 页IT知识库翔宇问吧收藏内容
当前位置:翔宇亭IT乐园IT知识库数据库Oracle

拥有不同主键的表能否进行映射

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2010-01-31 11:42:00

问:我有这么一个表:
 =======================================
  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来创建。

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2022 biye5u.com. All Rights Reserved.