Oracle的merge
来源:互联网 发布:手机淘宝联盟怎么注册 编辑:程序博客网 时间:2024/06/07 00:08
转自:http://xo-tobacoo.iteye.com/blog/182791
总结下。使用merge比传统的先判断再选择插入或更新快很多。
1)主要功能提供有条件地更新和插入数据到数据库表中
如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作
— 避免了分开更新
— 提高性能并易于使用
— 在数据仓库应用中十分有用
2)MERGE语句的语法如下:
MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]{ table | view | subquery } [t_alias] ON ( condition )WHEN MATCHED THEN merge_update_clauseWHEN NOT MATCHED THEN merge_insert_clause;
还是看例子就知道怎么回事:
MERGE INTO copy_emp c USING employees e ON (c.employee_id=e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name=e.first_name, c.last_name=e.last_name, c.department_id=e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id,e.first_name,e.last_name, e.email,e.phone_number,e.hire_date,e.job_id, e.salary,e.commission_pct,e.manager_id, e.departmetn_id);
MERGE INTO copy_emp cUSING employees eON (c.employee_id=e.employee_id)WHEN MATCHED THENUPDATE SETc.first_name=e.first_name,c.last_name=e.last_name,c.department_id=e.department_idWHEN NOT MATCHED THENINSERT VALUES(e.employee_id,e.first_name,e.last_name,e.email,e.phone_number,e.hire_date,e.job_id,e.salary,e.commission_pct,e.manager_id,e.departmetn_id);
3)使用merge的注意事项:
创建测试表:
CREATE TABLE MM (ID NUMBER, NAME VARCHAR2(20));CREATE TABLE MN (ID NUMBER, NAME VARCHAR2(20));
插入数据
INSERT INTO MM VALUES (1, 'A');INSERT INTO MN VALUES (1, 'B');
执行:MERGE INTO MN A USING MM B ON(A.ID=B.ID) WHEN MATCHED THEN UPDATE SET A.ID = B.ID WHEN NOT MATCHED THEN INSERT VALUES(B.ID, B.NAME);ON(A.ID=B.ID)报错,原因是on子句的使用的字段不能够用于update,即Oracle不允许更新用于连接的列修改:MERGE INTO MN A USING MM B ON(A.ID=B.ID) WHEN MATCHED THEN UPDATE SET A.NAME = B.NAME WHEN NOT MATCHED THEN INSERT VALUES(B.ID, B.NAME);ON(A.ID=B.ID)再插入:INSERT INTO MM VALUES (1, 'C');再执行:MERGE INTO MN A USING MM B ON(A.ID=B.ID) WHEN MATCHED THEN UPDATE SET A.NAME = B.NAME WHEN NOT MATCHED THEN INSERT VALUES(B.ID, B.NAME);ON(A.ID=B.ID)报错,原因无法在源表中获得一组稳定的行
4)更新同一张表的数据。需要注意下细节,因为可能涉及到using的数据集为null,所以要使用count()函数。
MERGE INTO mn a USING (select count(*) co from mn where mn.ID=4) b ON (b.co<>0)--这里使用了count和<>,注意下,想下为什么! WHEN MATCHED THEN UPDATE SET a.NAME = 'E' where a.ID=4 WHEN NOT MATCHED THEN INSERT VALUES (4, 'E');
- Oracle的MERGE用法
- Oracle的merge
- Oracle Merge的使用
- Oracle 的 MERGE用法
- oracle的merge into
- Oracle的merge用法
- Oracle的merge into
- oracle中merge的用法
- Oracle的merge用法详解
- Oracle的 Merge用法详解
- oracle中的MERGE的使用
- oracle merge into的使用
- oracle 神奇的merge into
- oracle中merge的用法
- Oracle merge into的用法
- Oracle MERGE INTO的用法
- oracle merge into 的用法
- oracle merge into的用法
- 宝宝来了
- 用JS获取表格单元中的数据
- SHRINK SPACE CHECK
- xml查询入门笔记
- C#鼠标自动点击
- Oracle的merge
- 项目总结:ORACLE通过JOB定时创建表的运用
- td定义了width:400px;但在页面里不起作用
- 数字摘要码
- 02-08 控制AutoCAD环境(八) 提示用户输入
- 合理规划您的硬盘分区
- instanceof
- 关于hosts
- 网站seo优化