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

Oracle Merge into语句

阅读更多

研究这个语句完全是为了偷懒而使用的。

因为在Java写后台程序的时候,经常会出现存在则UPDATE,不存在则INSERT的需求。

用SQL来完成就是要做3条SQL,用Hibernate写就就方便咯。

可是我用的是iBatis,就要写三条了。。

 

简单地说一下这个SQL吧。

 

MERGE INTO target_tbl a   
USING new_record b   
ON (a.product_id = b.product_id)   
WHEN MATCHED THEN  
UPDATE  SET a.product_name = b.product_name,   
                   a.category = b.category
WHEN NOT MATCHED THEN 
INSERT VALUES (b.product_id, b.product_name, b.category)   
WHERE b.category != 'BOOKS' 
;

 

merge into 关键字后面接着的是目标表,就是最终会改变数据的表。

using后面接的是结果集,可以是一个表,也可以是一条SQL查询语句。

ON 很显然是连接条件。

 

在后面的matched 和 NOT matched 的情况下,都和原有的INSERT UPDATE语句差不多,就是省去了写表名的动作。

 

又查了一下,merge into还可以附加delete操作呢。

可谓是非常强大,我的使用其实很简单:

MERGE INTO T T1
USING (
SELECT '1001' AS a,2 AS b FROM dual) T2
ON ( T1.a=T2.a)
WHEN MATCHED THEN
  
UPDATE SET T1.b = T2.b
WHEN NOT MATCHED THEN 
  
INSERT (a,b) VALUES(T2.a,T2.b);

 

备注,如果在存储过程里面使用了merge语句后,记得一定要COMMIT!!

是的,merge into语句是需要COMMIT的!

 

分享到:
评论

相关推荐

    Oracle MERGE INTO的用法示例介绍

    如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这样的话需要写更多的代码,同时性能也不好,要来回数据库两次.使用merge的话则可以一条SQL语句完成. 1)主要功能 ...

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA) 更新多个字段: INSERT INTO tbl (columnA,columnB,...

    使用BULK COLLECT, MERGE 语句提高sql执行效率

    详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询

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

    MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次...

    达梦数据库sql语言使用手册

    达梦数据库sql语言手册,达梦数据库是国产数据库里最好使用的,可以跟oracle数据无缝替换的

    Oracle10g 知识总结

    数据操作语句(DML):insert into 、delete、update、merge (3).数据定义语句(DDL):create 、alter、drop、truncate (4).数据控制语句(DCL):grant、revoke (5).事物控制语句(TCL):commit、rollback、savepoint

    SQL写法—数据修改

    条件 INSERT ALL 当使用ALL关键字时,oracle会从上至下判断每一个条件,当条件满足时就执行后面的into语句,merge语句最多可以支持两个when matched 子句

    Oracle事例

    字符串字段中含有\"\'\",如果用来组合sql语句,会造成语句不准确。 比如:replace(f1,\'\'\'\',\'\') <2>.字符串字段中含有\"\\t \\n\",如果用来在c或者c++程序中输出到文件,格式无法保证。 比如:replace(f2,...

    jsqlformatter:Java SQL格式化程序,美化程序和漂亮打印机

    已针对数百种复杂,真实SQL语句进行了测试待办事项/计划中添加对CREATE,ALTER,DELETE,SELECT INTO语句的支持检测并引用保留的关键字名称根据SQL方言添加格式选项(例如,逗号开头/结尾,贪婪空格,上/下/驼峰式...

    SQL基础编写与调试优化

    ORACLE SQL语句编写与调优 ORACLE交流群48949977 内容简介 第一部分 SQL基础 SQL简介 发展历史 SQL语句分类(DDL、DML、DQL、DCL) 内容简介 第五部分 SQL优化 优化器 SQL语句执行过程 SQL优化术语 第一...

    SQL培训第一期

    1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行的信息查询,select。 1.2.2 数据操作语言(DML) 用于操作关系型数据库对象内部的数据,insert、update、delete。 1.2.3 数据定义语言(DDL) 用来建立及定义...

    SQL性能优化

     USE_MERGE(使用MERGE JOIN方式联合)  USE_HASH(使用HASH JOIN方式联合)  索引提示:  INDEX(TABLE INDEX)(使用提示的表索引进行查询)  其它高级提示(如并行处理等等) 1.5 索引的规则: 建立...

Global site tag (gtag.js) - Google Analytics