Oracle中用一张表的字段更新另一张表的字段
今天在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的。
那么,有什么办法能将测试库中该字段的值更新到开发库中呢?
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
效果如下:

接下来是删除重复的数据,执行下面语句进入编辑模式:
SELECT *
FROM B MM
WHERE MM.CATEGORY_NAME IN
(SELECT CATEGORY_NAME FROM B
GROUP BY CATEGORY_NAME
HAVING COUNT(1) >1)
FOR UPDATE
效果如下:

然后选择需要删除的数据。
我们这边的表只有2个字段,所以可以用group by结果转存到临时表,再用临时表覆盖原表的方法洗数据。
但更多的情况是:(1)字段多于两个;(2)且某个字段相同的记录,别的字段可能不同(即不完全相同)
错误2:
在给B表做备份时,想整表复制到新表中,原来经常使用:
select * into new_table from old_table
去做这样的事情。预期的结果是:在复制表结构的同时,将表中的数据同时复制到new_table中。
结果,出现了下面的错误:

为什么呢?
原因:
原来select into是PL/SQL的赋值语句!而这里的使用格式和赋值的格式是不一致的。
所以,会报ORA-00905错误。
解决:
那么,PL/SQL中如何解决类似问题的呢?
那就是用create table,语句如下:
--复制表结构和数据
CREATE TABLE B1 AS SELECT * FROM B;
AS后接一个查询语句。
Oracle中用一张表的字段更新另一张表的字段的更多相关文章
- Oracle-更新字段-一张表的字段更新另一张的表的字段
设备表ops_device_info中的终端号terminal_id值是以 'D'开头的字符串,而终端表ops__terminal_info中的终端号terminal_id是8位字符串, 它们之间是通 ...
- MySQL使用一张表的字段更新另一张表的字段
转自https://blog.csdn.net/anxpp/article/details/73173274 update table1 t1 left join table2 t2 on t1.ke ...
- [SQL Service]从一张表取值更新另一张表字段
1. update table_A set table_A_column = ab.column from table_A aa left join table_B ab on aa.xx = ab ...
- sqlserver 将一个表中的某些字段更新到另一个表中(转载)
来源:https://blog.csdn.net/qq_23888451/article/details/86615555 https://blog.csdn.net/cyxinda/article/ ...
- UPDATE语句:将一个表里的字段更新到另一个表的字段里的语句
update table2 b,(select b.area_id as arid,sum(a.user_amount) as bcount from table1 a,table2 b where ...
- Oracle两张表关联批量更新其中一张表的数据
Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...
- oracle 用一个表的一个字段更新另一个表的一个字段
案列: 想更新A表的name字段,由于失误,在写这个表的时候,这个字段没有写,发现的时候,已经写了一个多月的数据了.改了之后的过程,会正常的写这个字段, 可是已经写了的数据也不能铲了,重新计算. 好在 ...
- oracle 批量更新之将一个表的数据批量更新至另一个表
oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...
- Oracle 中用一个表的数据更新另一个表的数据
Oracle 中用一个表的数据更新另一个表的数据 分类: SQL/PLSQL2012-05-04 15:49 4153人阅读 评论(1) 收藏 举报 oraclemergesubqueryinsert ...
随机推荐
- [TYVJ1827]『Citric II』一道防AK好题
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 第二届『Citric杯』NOIP提高组模拟赛第一题 描述 Lemon认为在第一届『Citric』杯模拟赛中出的 ...
- SPI介绍
此文摘自百度百科:http://baike.baidu.com/view/245026.htm SPI概述SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI, 是英语Serial P ...
- Spark在集群中的安装
今天由于所以要安装spark做一些实验.我已有的环境是: 操作系统:CentOS6.5 hadoop:hadoop2.4.1 JDK:1.7 集群环境:四个节点 闲话不说,以下是我的安装步骤: 说 ...
- java.lang.RuntimeException: java.lang.ClassNotFoundException: cmd.CmdWordCount$MyMapper解决方法
14/02/28 20:29:48 INFO mapred.JobClient: Task Id : attempt_201402281833_0004_m_000000_1, Status : FA ...
- 使用WIF实现单点登录Part III —— 正式实战 -摘自网络
经过前两篇文章,估计大家对WIF已经有比较充分的认识了,估计大家在经过了枯燥的理论以后,肯定是摩拳擦掌赶紧付诸于行动了.没办法,咱们程序员就是这个毛病.那好吧,我也不那么多废话了,直接进入正题吧. 我 ...
- nyoj 168 房间安排(区间覆盖)
房间安排 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间, ...
- linux定时器用法
linux定时器 原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...
- 【三支火把】---一份程序看懂C程序printf()的几种常用用法
闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...
- Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind 此异常的原因是服务器端口被占用 所以解决办法是: 一 ...
- background-position也许你没考虑到
设置背景图片时不知你有没有遇到过背景位置的困扰,有没有深入思考过,background-position到底是什么,下面请各位看看我的理解. 简而言之就一句话,默认图片左上角居元素左上角的坐标,例如: ...