一、业务场景:

(1)主从两个表,主表Student,有字段id、name、sex,从表Boy,有字段id、name,主从表同一对象id相同

(2)从表Boy的name属性被业务修改,定时批量处理主表,以维持主表name属性与从表一致

二、表结构

1、主表 Student

2、从表 Boy

三、建表SQL(DDL)

1、主表 Student

 -- DDL
CREATE TABLE student (
id NUMBER NOT NULL ,
name VARCHAR2( BYTE) NULL ,
sex VARCHAR2( BYTE) NULL
) ALTER TABLE student ADD CHECK (id IS NOT NULL); -- DML
INSERT INTO student VALUES ('', 'zhangsan', 'boy');
INSERT INTO student VALUES ('', 'lisi', 'girl');
INSERT INTO student VALUES ('', 'wangwu', 'boy');

2、从表 Boy

 -- DDL
CREATE TABLE boy (
id NUMBER NOT NULL ,
name VARCHAR2( BYTE) NULL
) -- DML
INSERT INTO boy VALUES ('', '张三');
INSERT INTO boy VALUES ('', '王五');

四、DML

1、基本语法


 -- DML
UPDATE student s SET s.name = '张三' WHERE id = ;

2、变相

  -- DML,.015s
UPDATE student s
SET s.name = (
SELECT b.name FROM boy b WHERE s.id = b.id AND s.name != b.name
)
WHERE EXISTS (
SELECT FROM boy b WHERE s.id = b.id AND s.name != b.name
);

3、快速游标法

  -- DML,.014s
BEGIN
FOR cur IN (
SELECT s.id sid, b.name bname
FROM student s, boy b
WHERE s.id = b.id AND s.name != b.name AND s.sex = 'boy'
) loop UPDATE student s SET s.name = cur.bname WHERE s.id = cur.sid; END loop ;
END ;

4、内联视图法(inline View)

  -- DML,.019s
UPDATE (
SELECT
s.name sname, b.name bname
FROM
student s, boy b
WHERE
s.id = b.id AND s.name != b.name
)
SET sname = bname;

报错提示:ORA-01779: 无法修改与非键值保存表对应的列

参考资料,从表id必须增加主键约束,且为视图内的where条件:

  -- DDL
ALTER TABLE boy ADD CONSTRAINT pk_id PRIMARY KEY (id);

5、合并法(Merge)

 MERGE INTO student s USING boy b ON (
s.id = b.id AND s.sex = 'boy' AND s.name != b.name
)
WHEN MATCHED THEN
UPDATE SET s.name = b.name;

报错提示:ORA-38104: 无法更新 ON 子句中引用的列

参考资料,错误原因是条件重复,正确写法:

  -- DML,.016s
MERGE INTO student s USING boy b ON (
s.id = b.id AND s.sex = 'boy'
-- AND s.name != b.name
)
WHEN MATCHED THEN
UPDATE SET s.name = b.name;

6、子查询关联

 update service cs set (cs.customer_id,cs.customer_code,cs.customer_name)=
(
select ccb.customer_id,ccb.customer_code,ccb.customer_name from customer_base ccb
inner join customer_contact ccc
on ccb.customer_id=ccc.customer_id
where ccc.key_='' and ccc.value_=cs.value_ and rownum<
)
where customer_id='' and start_time>sysdate-

Oracle批量、大量Update方法总结的更多相关文章

  1. oracle 批量更新之update case when then

      oracle 批量更新之update case when then CreationTime--2018年8月7日15点51分 Author:Marydon 1.情景描述 根据表中同一字段不同情况 ...

  2. Oracle中的 UPDATE FROM 解决方法

    转:http://www.cnblogs.com/JasonLiao/archive/2009/12/23/1630895.html Oracle中的 UPDATE FROM 解决方法 在表的更新操作 ...

  3. MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.

    mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...

  4. oracle Plsql 运行update或者delete时卡死问题解决的方法

    oracle Plsql 运行update或者delete时 遇到过Plsql卡死问题或者导致代码运行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中运行,Sql本 ...

  5. mybatis执行批量更新update

    Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...

  6. C# Oracle批量插入数据进度条制作

    前言 由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中.考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法.在插入操作运行时,会造成系统短暂 ...

  7. oracle批量新增更新数据

    本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...

  8. Oracle索引梳理系列(一)- Oracle访问数据的方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  9. mybatis批量更新 UPDATE mysql

    oracle和mysql数据库的批量update在mybatis中配置不太一样: oracle数据库: <update id="batchUpdate" parameterT ...

  10. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 在ubuntu更新时,出现错误E: Some index files failed to download, they have been ignored, or old ones used inst

    原文:https://blog.csdn.net/tian_ciomp/article/details/51339635 在ubuntu更新时,出现错误E: Some index files fail ...

  2. 阿里云查看本服务器 公网ip地址 命令

    阿里云的服务器用命令ifconfig查看的是本机内网地址 那如何访问公网地址呢? curl httpbin.org/ip

  3. windows server 2012配置php环境教程

    买了windows系统的服务器(VPS)等之后我们需要一个php环境来搭建自己的项目,这里介绍手工在windows server 2012上面配置php环境的具体步骤,适合使用服务器和VPS等的新手. ...

  4. 汉诺塔问题深度剖析(python实现)

    当我们学习一门编程语言的时候,都会遇到递归函数这个问题.而学习递归的一个经典案例就是汉诺塔问题.通过这篇文章,观察移动三个盘子和四个盘子的详细过程,您不仅可以深刻的了解递归,也更加熟悉了汉诺塔的游戏的 ...

  5. pdf的使用遇到的问题

    http://blog.csdn.net/atluckstar/article/details/77688972 回答网友提问  2015-7-28 因为好多人问能不能显示中文的问题,我总结大致分为两 ...

  6. 使用cookiecutter创建django项目

    使用cookiecutter创建django项目 下载安装: pip install cookiecutter cookiecutter https://github.com/pydanny/cook ...

  7. 禁用wordpress模板默认样式

    我们知道wordpress主题比如twentytwenty都会有样式,如果不想使用它们的默认样式怎么处理呢?其实很简单,随ytkah一起来看看吧.进入2020主题的function.php文件,里面有 ...

  8. Kdevelop的安装-2种方法

    使用 Ubuntu 的自带的源: sudo apt-get update sudo apt-get install kdevelop 这就可以了.update这部,假如不换源,更新非常慢.换源方法很简 ...

  9. socket套接字及粘包问题

    socket套接字 1.什么是socket socket是一个模块,又称套接字,用来封装互联网协议(应用层以下的层) 2.为什么要有socket 实现应用层以下的层的工作,提高开发效率 3.怎么使用s ...

  10. IE6兼容性bug汇总

    1.终极方法:条件注释 <!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本. <![endif]--> <!--[if gte IE 6]&g ...