服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Oracle - Oracle执行Update语句的几种方式

Oracle执行Update语句的几种方式

2022-09-05 17:42springsnow Oracle

这篇文章介绍了Oracle执行Update语句的几种方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

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

?
1
2
3
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条件中,并且是以=号来关联被更新表。

?
1
2
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特有的语句,语法如下:

?
1
2
3
4
5
6
7
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不会返回影响的行数,最多只能两个表关联。

?
1
2
3
4
5
merge into a
using b
 on (a.c1=b.c1 and a.c3='2011')
   when matched then
update a.c2=b.c2

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

语法:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/springsnow/p/9399281.html

延伸 · 阅读

精彩推荐
  • Oracleoracle调试存储过程的过程详解

    oracle调试存储过程的过程详解

    这篇文章主要介绍了oracle调试存储过程过程详解,文中通过图文展示介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    小小邪5482020-07-24
  • OraclePLSQL Developer13.0.4最新注册码和使用教程详解

    PLSQL Developer13.0.4最新注册码和使用教程详解

    PL/SQL Developer 13是一个集成开发环境,专门用于开发 Oracle 数据库的存储程序单元。这篇文章主要介绍了PLSQL Developer13.0.4注册和使用教程,需要的朋友可以参考...

    沧海一笑-dj10442022-01-20
  • OracleOracle表的分类以及相关参数的详解

    Oracle表的分类以及相关参数的详解

    本篇文章是对Oracle中表的分类以及相关参数进行了详细的分析介绍,需要的朋友参考下 ...

    Oracle教程网2362019-11-25
  • Oracleoracle快速删除重复的记录

    oracle快速删除重复的记录

    做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的...

    oracle教程网4272019-10-23
  • Oracleoracle学习笔记(二)

    oracle学习笔记(二)

    最近需要用的oracle,所以大家好好的学习下基础并整理下资料,希望能帮助到需要的朋友。 ...

    oracle教程网2432019-12-13
  • Oracleoracle异常(预定义异常,自定义异常)应用介绍

    oracle异常(预定义异常,自定义异常)应用介绍

    在开发过程中,经常会遇到一些测试,这时候就会想了解测试的过程,然后再根据过程分析代码错在哪里,这种情况下,就需要用到自定义异常,需要了解...

    oracle教程网5062019-11-14
  • OracleOracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程物理内存检查及临时temp空间不足的情况,想必有很多的朋友都有遇到过吧,下面与大家分享下具体的解决方法,感兴趣的朋友可以参考下哈...

    Oracle教程网5562019-11-26
  • OracleOracle连接远程数据库的四种方法

    Oracle连接远程数据库的四种方法

    这篇文章主要为大家详细介绍了Oracle连接远程数据库的四种设置方法和注意事项,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    黄景新8582020-01-12