MERGE语句的使用(复制表)
2010-06-17 09:54
204 查看
今天需要更新一个表的标识,需要和另外一个表关联,但是update无法做到这点。
A表中有一个memo,B表中有一个栏位存了几个STRING,当B表中的任何一个STRING为A表中的memo的子串时,更新A表中Flag。UPDATE如下
UPDATE PASSAP.TB_FINPAY_VTH_CHECK A SET A.CHECK_FLAG = 2
--WHERE A.TXNAMT < 0 AND A.TLRNUM BETWEEN 'SZ01' AND 'SZ30' AND PASSAP.TB_FINPAY_DSF_MEMO ON LOCATE(C.NAME, A.FURINF) > 0)
后来决定使用MERGE:
用途
merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。
该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。
merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。
语法
其中,merge_insert_clause::=
关键字、参数
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语句如下
MERGE INTO PASSAP.TB_FINPAY_VTH_CHECK A
USING PASSAP.TB_FINPAY_DSF_MEMO B
ON ( A.TXNAMT < 0 AND A.TLRNUM BETWEEN 'SZ01' AND 'SZ30' AND LOCATE(B.NAME, A.FURINF) > 0)
WHEN MATCHED THEN UPDATE SET A.CHECK_FLAG = 2;
其实MERGE不光是在多表关联更新时用到,更重要的是可以完美的将INSERT 和 UPDATE语句结合起来。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/herring0208/archive/2007/09/06/1774598.aspx
A表中有一个memo,B表中有一个栏位存了几个STRING,当B表中的任何一个STRING为A表中的memo的子串时,更新A表中Flag。UPDATE如下
UPDATE PASSAP.TB_FINPAY_VTH_CHECK A SET A.CHECK_FLAG = 2
--WHERE A.TXNAMT < 0 AND A.TLRNUM BETWEEN 'SZ01' AND 'SZ30' AND PASSAP.TB_FINPAY_DSF_MEMO ON LOCATE(C.NAME, A.FURINF) > 0)
后来决定使用MERGE:
用途
merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。
该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。
merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。
语法
其中,merge_insert_clause::=
关键字、参数
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语句如下
MERGE INTO PASSAP.TB_FINPAY_VTH_CHECK A
USING PASSAP.TB_FINPAY_DSF_MEMO B
ON ( A.TXNAMT < 0 AND A.TLRNUM BETWEEN 'SZ01' AND 'SZ30' AND LOCATE(B.NAME, A.FURINF) > 0)
WHEN MATCHED THEN UPDATE SET A.CHECK_FLAG = 2;
其实MERGE不光是在多表关联更新时用到,更重要的是可以完美的将INSERT 和 UPDATE语句结合起来。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/herring0208/archive/2007/09/06/1774598.aspx
相关文章推荐
- MERGE语句的使用!
- 使用 MERGE 语句实现增删改
- SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)
- 使用MERGE语句同步表
- 在SqlServer中如何使用Sql语句将一张表的数据复制到另一张表
- SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)
- 读书笔记之MERGE 语句使用
- SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)
- sql2008使用merge语句实现数据差异传输
- [MySQL Bug] 在RBR复制模式下使用Merge引擎导致备库Crash的bug
- SQL Server-使用Merge语句实现表数据之间的对比同步
- Merge(在一条语句中使用Insert,Update,Delete) 对两个表进行同步数据
- 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步
- 使用sql语句复制表
- SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)
- 看看最新的SQL Server 2008的新语句MERGE使用
- Merge 语句的使用
- SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)
- SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题 (转)