`
tooby
  • 浏览: 117536 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle更新的两种方式(merge/update内联视图)

    博客分类:
  • SQL
 
阅读更多

对于Oracle的两表联合更新的场景(有AB两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:

创建用例表:

CREATE TABLE test1(ID NUMBER(10),NAME VARCHAR2(20));

INSERT INTO test1 VALUES(1,'lucy');

INSERT INTO test1 VALUES(2,'lily');

 

CREATE TABLE test2(ID NUMBER(10),NAME VARCHAR2(20));

INSERT INTO test2 VALUES(1,'lucy');

INSERT INTO test2 VALUES(2,'hanmeimei');

 

merge方式:

MERGE INTO test1 USING test2

ON (test1.id = test2.id)

WHEN MATCHED THEN UPDATE

  SET test1.name = NVL2(test1.name,test2.name,test1.name);

 

merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式。

 

update内联视图方式:

使用这种方式必须在test2.id上有主键(这里很好理解,必须保证每一个test1.id对应在test2里只有一条记录,如果test2中有多条对应的记录,怎么更新test1?),一般而言这种方式代价比merge方式稍高。

ALTER TABLE test2 ADD CONSTRAINT pk_test2 PRIMARY KEY(ID);

UPDATE (SELECT a.id aid,a.name aname,b.id bid,b.name bname FROM TEST1 a,test2 b WHERE a.id=b.id) t

SET aname = NVL2(aname,bname,aname);

 

使用并行,加快大量数据更新:

MERGE /*+parallel(test1,4)*/ INTO test1 USING test2

ON (test1.id = test2.id)

WHEN MATCHED THEN UPDATE

  SET test1.name = NVL2(test1.name,test2.name,test1.name);

分享到:
评论

相关推荐

    oracle的update的五种方式

    Oracle 更新语句五种方式详解 Oracle 的更新语句是数据库管理系统中的一种基本操作,用于修改数据库表中的数据。更新语句的优化研究是数据库性能优化的重要组成部分。本文将详细介绍 Oracle 更新语句的五种方式,并...

    update语句的优化-oracle .pdf

    在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...

    oracle merge into的使用

    在Oracle 9i版本中,Merge Into 的引入使得开发者能够同时执行更新(UPDATE)和插入(INSERT)操作,而到了Oracle 10g及后续版本,这一功能得到了进一步增强,提供了更丰富的条件选择和操作选项。 ### 知识点详述:...

    Oracle merge into用法

    在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...

    WinMerge 文件对比合并工具

    WINMERGE WinMerge 是一款用以对文件进行对比以及合并,可以运行在所有流行的 Windows平台上的开源软件。有些功能需要额外安装组件。 最新的 WinMerge 版本以及其它相关信息可以从 http://winmerge.org 得到。 ...

    oracle merge 用法详解

    1. **UPDATE或INSERT子句成为可选项**:与Oracle 9i不同的是,在Oracle 10g中,`MERGE`语句允许用户只指定`UPDATE`或`INSERT`中的任意一个操作。 2. **支持WHERE子句**:在`UPDATE`和`INSERT`子句后可以添加`WHERE`...

    Oracle_merge

    Oracle 9i R2 版本引入了一种名为 `MERGE` 的新功能,这一功能在业界被称为“更新插入”(upsert),即在一个步骤内同时实现数据更新与插入操作。通过这种方式,不仅能够极大地提高数据处理效率,还能简化复杂的业务...

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    oracle Merge 函数.doc

    Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge 函数的基本语法结构为: ```sql MERGE INTO 目标表 USING 来源表 ON (条件) WHEN MATCHED THEN 更新操作 ...

    Hibernate merge、update与saveOrUpdate方法的区别

    在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现在对实体状态的处理方式上。 #### 1. `merge` 方法 `...

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    session中merge和update的区别

    Hibernate中session的merge以及update方法

    浅谈Oracle数据库中Merge Into的用法.pdf

    在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则是“有则更新,无则插入”。 Merge ...

    qsort/heapsort/merge/BinarySearch/List实现

    自己写的一些简单算法和数据结构的代码 快排 堆排 归并 二分查找 单链表

    Oracle merge合并更新函数实例详解

    在处理需要根据特定条件更新或插入数据的场景时,MERGE语句提供了高效的解决方案,尤其适合那些需要在单个SQL语句中同时执行这两种操作的情况。这减少了对数据库的多次访问,提高了整体性能。 MERGE语句的基本结构...

    Oracle的三种表连接方式

    Oracle 的三种表连接方式是指在做表 join 的时候, Oracle 有三种方式,分别是:sort merge join(SMJ) ·nest loop(NL) ·hash join(HJ)。下面是对这三种策略的详细讲解: sort merge join(SMJ) sort merge join ...

    oracle使用 merge 更新或插入数据(总结)

    oracle使用 merge 更新或插入数据(总结)

    实现三视图题目的自动生成

    ## 环境 - numpy - matplotlib - random - pillow ## 文件结构 - main.py - 主文件 - 直接运行即可得到对应题目 ... - 将文件保存在`merge/A`对应的是答案为A的题目,`merge/B`,`merge/C`,`merge/D`同理

    oracle死锁原因解决办法

    在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。死锁不仅影响数据库性能,还会影响应用程序的可用性和用户...

Global site tag (gtag.js) - Google Analytics