Oracle中用一张表的字段更新另一张表的字段

发表于:2015-7-02 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Leon-LYH    来源:51Testing软件测试网采编

  今天在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的。
  那么,有什么办法能将测试库中该字段的值更新到开发库中呢?
  SQL Server中这是比较容易解决的,而Oracle中就不知道方法了。
  SQL Server中类似问题的解决方法
  后来只好用最笨的方法:
  首先,将数据复制到Excel;(假设称测试库的表为A--含有数据)
  然后,在开发库中建立和表A同结构的表B;(这里为了导入数据的简单,我对表B的结构进行了改造,只有两个字段)
  图 表B的数据
  再利用PL SQL的导入功能将这些数据导入到表B中(此时表B的数据为表A的子集);
  接下来要做的是将表B的数据更新到开发库中相应的表中,假设称之为表D;
  这里用到了oracle中的Merge into。
  SQL Code如下:
  MERGE INTO D
  USING B
  ON (D.CATEGORY_NAME = B.CATEGORY_NAME /*AND B IS NULL*/)
  WHEN MATCHED THEN
  UPDATE SET
  RELAVANCE_PROPETY = B.RELAVANCE_PROPETY
  关于MERGE INTO的详细讲解
  但是,在此过程中发生了错误:
  错误1:
  在执行MERGE INTO操作的时候,发生了ORA-30926错误。
  该错误的原因是什么?如何解决呢?
  原因:
  百度了一下,大体知道是因为表B含有重复的Key,这里的Key就是条件中的CATEGORY_NAME,从条件:
  D.CATEGORY_NAME = B.CATEGORY_NAME
  可以看出。
  补充:
  解决:
  知道了上面的原因,我们要做的就是把有重复CATEGORY_NAME的记录删除。
  用下面的SQL获得哪些CATEGORY_NAME的值重复了:
  SELECT CATEGORY_NAME,COUNT(1) FROM B
  GROUP BY CATEGORY_NAME
  HAVING COUNT(1) >1
  效果如下:
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号