视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle中MERGEINTO的用法
2020-11-09 11:46:20 责编:小采
文档


自从版本9i之后,对于“有则更新,无则插入”有了一个新的用法,不需要再执行2次SQL了。 merge 命令可以用来用一个表中的数据来

自从版本9i之后,对于“有则更新,无则插入”有了一个新的用法,不需要再执行2次SQL了。

merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。MERGE INTO本来应该是用来合并表的,不过因为其特性,根据用途不同可以用在以下场合:

关键字、参数

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

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

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

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

1.合并表
2.外部数据插入更新
3.用JOIN表更新

各种情况下的
1.合并表
把表格T2的数据合并到表格T1里,根据结合条件,如果存在则更新,不存在则插入

MERGE INTO T1

USING T1 ON(

T1.user_id = T2.user_id

)

WHEN MATCHED THEN

UPDATE SET

T1.user_nm = T2.user_nm

WHEN NOT MATCHED THEN

INSERT

(user_id,user_nm)

VALUES

(T2.user_id,T2.user_nm)

2.外部数据插入更新

根据外部传进来的参数,如果存在的话,用给定的参数更新,如果不存在则插入

MERGE INTO T1

USER DUAL ON(

T1.user_id = '001'

)

WHEN MATCHED THEN

UPDATE SET

T1.user_nm = 'David Vi'

WHEN NOT MATCHED THEN

INSERT

(user_id, user_nm)

VALUES

('001','David Vi')

3.用JOIN表更新
这个其实和第一个应用差不多,就是USING内部是个多个表进行结合的子表,根据多个表的结合查询然后对对象表进行更新。

对于第1,3应用有个问题,就是更新对象表和USING表(子表)是1:N的关系的话,无法更新。
另外,对于第3个应用,不如用VIEW更新来的快。

下载本文
显示全文
专题