`
isiqi
  • 浏览: 16706608 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle 9i新增SQL命令----MERGE 

阅读更多
用途

Merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于ON子句的条件。

该语句可以在同一语句中执行两步操作,可以减少执行多条INSERT 和UPDATE语句。

MERGE是一个确定性的语句,即不会在同一条MERGE语句中去对同一条记录多次做修改操作。

语法

Text description of statements_93.gif follows

其中,merge_update_clause::=


Text description of statements_94a.gif follows

其中,merge_insert_clause::=


Text description of statements_95a.gif follows

关键字、参数

INTO 子句

在INTO子句中指定所要修改或者插入数据的目标表

USING 子句

在USING子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。

ON 子句

在ON子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,ORACLE用数据源中的相应数据修改这些行。对于不满足条件的那些行,ORACLE则插入数据源中相应数据。

WHEN MATCHED | NOT MATCHED

用该子句通知ORACLE如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。

merge_update子句

MERGE_UPDATE子句执行对目标表中的字段值修改。当在符合ON子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。

限制:当修改一个视图时,不能指定一个DEFAULT值

merge_insert 子句

MERGE_INSERT子句执行当不符合ON子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。

限制:当修改一个视图时,不能指定一个DEFAULT值

范例
MERGE 范例

下面的例子在OE模式下创建一个BONUSES表,BONUS的缺省值为100。然后插入BONUSES表所有有成绩的销售人员(基于OE_ORDERS表的SQLES_REP_ID字段)。最后,人力资源管理人员决定,所有的人员将得到分红。没有销售成绩的员工得到工资的1%的分红,而那些有销售成绩的员工将得到缺省分红以及工资的1%。可以用一条MERGE语句将完成上述修改:

CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100);

INSERT INTO bonuses(employee_id)

(SELECT e.employee_id FROM employees e, orders o

WHERE e.employee_id = o.sales_rep_id

GROUP BY e.employee_id);

SELECT * FROM bonuses;

EMPLOYEE_ID BONUS

----------- ----------

153 100

154 100

155 100

156 100

158 100

159 100

160 100

161 100

163 100

MERGE INTO bonuses D

USING (SELECT employee_id, salary, department_id FROM employees

WHERE department_id = 80) S

ON (D.employee_id = S.employee_id)

WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01

WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)

VALUES (S.employee_id, S.salary*0.01);

EMPLOYEE_ID BONUS

----------- ----------

153 180

154 175

155 170

156 200

158 190

159 180

160 175

161 170

163 195

157 95

145 14

170 96

179 62

152 90

169 100

分享到:
评论

相关推荐

    oracle 9i sql 考试试题

    ### Oracle 9i SQL 考试试题解析 #### 题目1:关于EMPLOYEES表结构的插入操作 题目提供了EMPLOYEES表的结构,包括EMPLOYEE_ID作为主键,以及FIRST_NAME和LAST_NAME两个字段,并要求识别出能够成功插入一行数据的SQL...

    SQL中Merge用法详解

    MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,...

    ORACLE9i_优化设计与系统调整(doc)

    Oracle 9i引入了自动SQL调优,通过SQL Profile和SQL Plan Baseline来改进执行计划,减少全表扫描,增加索引的利用率。 2. 索引策略:合理创建和使用索引是提升查询速度的关键。B树索引、位图索引和函数索引各有适用...

    oracle9i数据仓库调优

    Oracle9i引入了MERGE语句,这是一种新语法,它将条件性的INSERT和UPDATE操作组合在一条单一的语句中,简化了数据仓库应用程序的实现过程。 - **合并/更新插入结果**:通过使用Oracle9i中的MERGE语句,能够有效提高...

    oracle merge 用法详解

    自Oracle 9i版本开始,Oracle数据库引入了一个非常强大的SQL语句——`MERGE`命令。通过这个命令,用户可以在一个单一的SQL语句中完成对表的插入(`INSERT`)和更新(`UPDATE`)操作,极大地简化了数据处理流程并提高了...

    Oracle9i优化器介绍

    Oracle9i优化器是Oracle数据库9i版本中的关键组件,其主要任务是在执行SQL查询时选择最有效的执行路径,以确保数据检索的速度和效率。优化器通过分析多种可能的执行计划,评估每种计划的成本,并选择成本最低的那个...

    基于Oracle 9i数据库的查询优化.pdf

    以下将详细介绍Oracle 9i数据库的查询优化策略,包括基于索引的优化、SQL优化和其他措施。 1. 基于索引的优化: - 索引是数据库快速定位数据的关键。在Oracle 9i中,合理创建和使用B树索引、位图索引、唯一索引和...

    Oracle_merge

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

    Oracle9i培训胶片中文版12基本的DDL和DML介绍caith.ppt

    Oracle 9i是一款广泛使用的数据库管理系统,而DDL(Data Definition Language)和DML(Data Manipulation Language)是SQL语言中的核心部分,它们分别用于定义和操作数据库中的数据。本篇Oracle 9i培训胶片主要介绍...

    Oracle SQL*Plus Pocket Reference, 2nd Edition

    合并数据是一个较为高级的功能,在Oracle9i版本中得到了支持。本节将介绍如何使用`MERGE`语句来合并来自不同源的数据到目标表中。这通常用于数据同步或更新场景。 #### 1.8 事务管理 事务管理是确保数据一致性和...

    Oracle中merge into的使用

    在Oracle 9i版本之前,`MERGE INTO`语句要求同时指定`UPDATE`和`INSERT`,但在9i及以后的版本,尤其是Oracle 10g中,这一限制被放宽了。现在,你可以根据需求选择性地使用`UPDATE`或`INSERT`,并且在`ON`条件中可以...

    oracle merge into的使用

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

    SQL基础教程-表的连接(Oracle)

    Oracle 9i引入了一系列新特性以支持SQL:99标准,包括但不限于: - **JOIN语句**:用于明确指定如何连接两个或多个表。 - **CASE语句**:提供了一种更灵活的方式来根据条件返回结果。 - **Scalar Subqueries**:可以...

    oracle 定位sql语句

    1. **表连接方式**:Oracle支持多种表连接方式,包括哈希连接(Hash Join)、合并连接(Merge Join)、嵌套循环连接(Nest Loop,也称为Cluster Join)和索引连接(Index Join)。每种连接方式都有其适用场景,比如...

    o9i_dwperfcomp_dwflowOracle9i 数据仓库增强

    Oracle9i引入了MERGE语句,这是一种新的SQL语法,能够在一个单一的语句中同时执行条件型INSERT和UPDATE操作,极大地简化了数据仓库应用的实现,提高了数据加载和更新的效率。 #### 合并/更新插入结果 使用Oracle9i...

    基于Oracle数据库的几种常见SQL优化策略.pdf

    MERGE命令是Oracle9i及以后版本新增的命令,其字面上的意思就是合并、兼并,用来合并UPDATE和INSERT语法。通过 MERGE 命令,根据一张表或子查询的连接条件对数据进行合并、更新和插入操作,可以提高数据库的处理性能...

    Mybatis批量foreach merge into的用法

    首先,需要使用Oracle 9i及其以后版本支持的merge into语句,该语句可以实现insertOrUpdate的功能。然后,使用Mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表。foreach的 ...

Global site tag (gtag.js) - Google Analytics