Oracle没有update from语法,可以通过四种写法实现同样的功能:

一、标准update语法(常用、速度可能最慢)

当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择。

update  a
set a.c2= (select b.c2from b where a.c1=b.c1)
where exists (select 1 from b where a.c1=b.c1)

二、内联视图更新(关联主键字段,速度较快)

inline view更新法就是更新一个临时建立的视图。

方案:更新一个临时建立的视图。要求B表的主键字段必须在where条件中,并且是以=号来关联被更新表。

update (select a.c2 as ac2,b.c2 as bc2 from a, b where a.c1=b.c1 and a.c3=’2011’) as M
set ac2=bc2

三、merge更新法 (关联字段非主键时,速度较快)

merge是oracle特有的语句,语法如下:

MERGE INTO table_name alias1 --主表,即需要被修改的表
USING (table | view | sub_query) alias2 --从表,即来源表
ON (join condition) --连接条件
WHEN MATCHED THEN --在匹配的记录中进行
UPDATE table_name SET col1 = col_val1, col2 = col2_val --更改主表信息
WHEN NOT MATCHED THEN --在不匹配的情况下,筛选从表记录插入到主表【可选】
INSERT (column_list) VALUES (column_values);

原理分析:在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就对alias1表进行更新的操作(Update),如果不匹配,就对alias1表进行插入操作(Insert)。

执行merge不会返回影响的行数,最多只能两个表关联。

merge into a
using b
on (a.c1=b.c1 and a.c3=’2011’)
when matched then
update a.c2=b.c2

四、快速游标更新法(复杂逻辑时,效率很高)

语法:

begin
for cr in (查询语句) loop --循环
update table_name set ... --更新语句(根据查询出来的结果集合)
end loop; --结束循环
end;
begin
for cur in (select a.rowid ,b.c2 from a, b where a.c1=b.c1 and a.c3=’2011’ ) loop
UPDATE a set c2=cur.c2 where rowid=cur.rowid;
end loop;
end;

Oracle Update语句的更多相关文章

  1. Oracle Update 语句语法与性能分析 - 多表关联

    Oracle Update 语句语法与性能分析 - 多表关联   为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create ...

  2. [oracle] update语句卡住问题

    执行update语句的时候发现执行半天不成功 update main_order set order_source = '2', order_status = '2' 查询哪些对象被锁 select ...

  3. oracle update语句的几点写法

    update两表关联的写法包括字查询 1.update t2 set parentid=(select ownerid from t1 where t1.id=t2.id); 2. update tb ...

  4. Oracle update语句更新值来自另一张表中的数据

    task 任务表 role 角色表 两表之间必须有关联的字段 update task t set t.roleName = ( select r.name from role r where r.id ...

  5. Oracle的update语句优化研究

    最近研究sql优化,以下文章转自互联网: 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation s ...

  6. ORACLE多表关联UPDATE 语句

    转载至:http://blog.itpub.net/29378313/viewspace-1064069/ 为了方便起见,建立了以下简单模型,和构造了部分测试数据:在某个业务受理子系统BSS中, SQ ...

  7. oracle执行update语句时卡住问题分析及解决办法

    转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...

  8. [转]Oracle的update语句优化研究

    原文地址:http://blog.csdn.net/u011721927/article/details/39228001 一.         update语句的语法与原理 1.     语法 单表 ...

  9. Oracle 增删改(INSERT、DELETE、UPDATE)语句

    Ø  简介 本文介绍 Oracle 中的增删改语句,即 INSERT.DELETE.UPDATE 语句的使用.是时候展现真正的技术了,快上车: 1.   插入数据(INSERT) 2.   修改数据( ...

随机推荐

  1. c# Time类

    直接上代码 public KBehaviour() { //间隔时间 System.Timers.Timer t = ); t.Elapsed += new System.Timers.Elapsed ...

  2. Firebird 列可空非空修改

    2018-12-04 至少到Firebird 3.0.4 已经添加了设置可空 和 非空的语法:如 -- 删除非空(设置为可空) ALTER TABLE TECH ALTER label drop NO ...

  3. HTML5坦克大战(韩顺平版本)

    HTML5坦克大战(韩顺平版本) 2017-3-22 22:46:22 by SemiconductorKING 去年暑假学习了一下HTML5实现简单的坦克大战,觉得对JavaScript初学者来说, ...

  4. SQL update 多表连接方法

    SQL Update多表联合更新的方法 () sqlite 多表更新方法 //---------------------------------- update t1 set col1=t2.col1 ...

  5. C#语言-07.文件操作

    a. 文件操作:适用于相对简单的数据保存 i. 读写文件的步骤: . 创建文件流 . 创建读写器 . 读写文件 . 关闭读写器 . 关闭文件流 ii. FileStream(文件流),它主要用于读写文 ...

  6. Shiro - 关于session

    Shiro Session session管理可以说是Shiro的一大卖点. Shiro可以为任何应用(从简单的命令行程序还是手机应用再到大型企业应用)提供会话解决方案. 在Shiro出现之前,如果我 ...

  7. javaweb之jsp的九个隐含对象与基本语法

    1.在页面上可以不用声明直接使用的对象称为jsp页面的隐含对象.使用<% %>编写的java代码在_jspService方法中,如下: public void _jspService(fi ...

  8. C Primer Plus note1

    C语言编译错误:multiple definition of `main' main多重定义,在同一个工程中定义了多个main函数 出现如下图的错误: 这是因为在第一张图中,有一个main.c的mai ...

  9. Css3新增背景属性

    1.background-origin 背景的起始位置 background-origin: border-box || padding-box || content-box; 案例初始化: 代码: ...

  10. jquery文本框textarea自适应高度

    浏览器中默认的文本框是不能根据内容的增多变高,只能固定高度有滚动条,体验不是很好,找了很多方法兼容都不行,总算找到个兼容良好的方法: <body> <textarea id=&quo ...