Oracle 在 9i 引入了 merge 命令, 通过这个 merge 能够在一个SQL 语句中对一个表同时执行 inserts 和 updates 操作。Merge into 可以实现用 B 表来更新 A 表数据(如果匹配上),如果 A 表中没有,则把 B 表的数据插入 A 表中。

管中窥豹

MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN [execute something else here ! ]

举个栗子:

merge into new_products p using old_products op
on (p.product_id = np.product_id)
when matched then
update set p.product_name = op.product_name
when not matched then
insert values(
op.product_id, op.product_name, op.category)

使用 old_products 表中的输入插入 new_products 中,匹配关系为 on 后面的条件字句的内容。when matched then 就是根据匹配关系匹配上了,when not matched then 就是没有匹配上需要做的相应操作。网上的一般资料都显示在做 merge 的时候,这样同样的情况下,merge 的性能是优于同等功能的update/insert 语句的。

在Oracle 10g中MERGE有如下一些改进:

1、UPDATE 或 INSERT 子句是可选的

2、UPDATE 和 INSERT 子句可以加 WHERE 子句

3、UPDATE 子句后面可以跟 DELETE 子句来去除一些不需要的行

UPDATE 或 INSERT 子句是可选的

merge into new_products p using old_products op
on (p.product_id = np.product_id)
when matched then
update set p.product_name = op.product_name

when matched then 和 when not matched then 都是可选则参数,可以根据具体的业务类型来进行数据库操作,而不用拘泥于原有特定的语法。

添加 WHERE 子句

merge into new_products p using old_products op
on (p.product_id = np.product_id)
when matched then
update set p.product_name = op.product_name where op.name like '%co2fe%'
when not matched then
insert values(
op.product_id, op.product_name, op.category) where op.name like '%co2fe%'

在添加了 where 条件之后我们的 update/insert 就会变得更加的灵活,能够满足更多的业务需求。

DELETE 子句来去除一些不需要的行

merge into new_products p using old_products op
on (p.product_id = np.product_id)
when matched then
update set p.product_name = op.product_name
delete where op.name like '%co2fe%'
when not matched then
insert values(
op.product_id, op.product_name, op.category)

同样的,使用 delete 语句之后我们可以实现更多的功能和业务,扩展了 merge into 的使用面。

本文由个人 hexo 博客 co2fe.com 迁移

date: 2017-09-12 15:38:41

Oracle Meger into 函数的更多相关文章

  1. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  2. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  3. Oracle日期时间函数大全

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits ...

  4. Oracle过程及函数的参数模式,In、out、in out模式

    Oracle过程及函数的参数模式 In.out.in out模式 在Oracle中过程与函数都可以有参数,参数的类型可以指定为in.out.in out三种模式. 三种参数的具体说明,如下图所示: ( ...

  5. oracle的substr函数的用法

    oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] ) 如:     substr( ...

  6. Oracle nvl(),nvl2()函数介绍

    NVL函数 Oracle/PLSQL中的一个函数. 格式为: NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值, ...

  7. Oracle LPAD/RPAD函数在处理中文时的注意事项

    首先看下Oracle官方对函数的定义: The RPAD function returns an expression, right-padded to a specified length with ...

  8. oracle wm_concat(column)函数的使用

    oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(c ...

  9. Oracle之自定义函数

    数据库中函数包含四个部分:声明.返回值.函数体和异常处理. --没有参数的函数 create or replace function get_user return varchar2 is v_use ...

随机推荐

  1. 细说Redis监控和告警

    https://blog.csdn.net/qq_27623337/article/details/53206685

  2. eclipse不会自动编译的问题解决

    注意:非必要的时候,重新下载eclipse安装是最有效的解决方法. 以下为尝试的步骤: 1.看看project->Build Automatically有没有勾上?如果没有,勾上以后,clean ...

  3. webpack 学习笔记 03 Code Splitting

    Introduction 对于较大的web 应用来说,将所有的代码文件压缩成一个文件是不合适的,在部分代码文件只有特殊情况下才被需要的情况下,这无疑是一种浪费.webpack 提供了讲代码文件分块的能 ...

  4. EventBus3.0使用笔记.md

    事件总线这个其实没什么好说的,除了已经ondestroy的fragment或者activity不能接受外,只要定义了的都能接收消息 代码如下,需要注意的一点就是接收的监听事件必须用public修饰并且 ...

  5. fastscript增加公共函数

    fastscript增加公共函数 unit fs_BsCommFuncs; interface{$i fs.inc}uses SysUtils, Classes, fs_iclassesrtti, f ...

  6. 几点iOS开发技巧

    转自I'm Allen的博客   原文:iOS Programming Architecture and Design Guidelines   原文来自破船的分享   原文作者是开发界中知晓度相当高 ...

  7. Android图片缓存之Bitmap详解(一)

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. Bitmap: Bitmap是Android ...

  8. from: 关于RabbitMQ

    from: http://lynnkong.iteye.com/blog/1699684 1      什么是RabbitMQ? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种, ...

  9. auth 认证

    参考链接 https://blog.csdn.net/hotnet522/article/details/5824716 http://blog.sina.com.cn/s/blog_6d6fbbd5 ...

  10. ggplot2-为图形加入直线

    本文更新地址:http://blog.csdn.net/tanzuozhev/article/details/51112057 本文在 http://www.cookbook-r.com/Graphs ...