`
xo_tobacoo
  • 浏览: 391451 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle使用 merge 更新或插入数据(总结)

阅读更多
总结下。使用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_clause

WHEN 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 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);


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');

4
2
分享到:
评论

相关推荐

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    oracle merge into的使用

    描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为灵活和高效的数据管理方式。在...

    Oracle_merge

    在数据库管理中,尤其是在处理大量数据的场景下,高效地更新或插入数据是一项至关重要的任务。Oracle 9i R2 版本引入了一种名为 `MERGE` 的新功能,这一功能在业界被称为“更新插入”(upsert),即在一个步骤内同时...

    利用 sqluldr2导出数据 使用sqlldr导入数据 通过merge into 合并更新数据

    当我们需要将新数据集与现有数据库表进行比较并根据条件进行插入或更新时,`MERGE INTO`语句就派上用场了。这个语句允许我们基于特定条件更新已有记录,同时插入新的记录。 - 基本语法:`MERGE INTO 目标表 USING ...

    Oracle merge into用法

    在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...

    oracle merge 用法详解

    通过以上案例,我们可以清楚地了解到`MERGE`命令的强大之处,它不仅可以灵活地处理数据更新和插入,还支持更高级的功能如使用`WHERE`子句和`DELETE`子句等。这些特性使得Oracle数据库的`MERGE`命令成为了处理复杂...

    oracle Merge 函数.doc

    下面是一个简单的示例,演示如何使用 Merge 函数来更新或插入数据: ```sql CREATE TABLE merge_test1 (a NUMBER, b VARCHAR2(20)); CREATE TABLE merge_test2 (a NUMBER, b VARCHAR2(20)); INSERT INTO merge_test...

    浅谈Oracle数据库中Merge Into的用法.pdf

    在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则是“有则更新,无则插入”。 Merge ...

    oracle使用 merge

    在Oracle数据库管理中,`MERGE`语句是一种强大的功能,它允许用户根据源表中的数据更新目标表,同时也可以向目标表中插入新的记录。这使得`MERGE`成为处理大量数据时的一个高效工具,特别是在需要同步两个数据集的...

    Oracle 大数据量操作性能优化

    Oracle 建议,当表大小超过 2G 或者表有历史数据和当前数据之分时,考虑使用分区。 分区的种类有多种,包括范围分区、列表分区、Hash 分区、范围 Hash 混合分区、范围列表混合分区等。其中,范围分区和列表分区是最...

    Mybatis批量foreach merge into的用法

    merge into语句可以根据条件匹配更新或插入数据。 3. Mybatis的动态SQL语法foreach循环插入可以实现批量插入。foreach循环可以将List中的实体bean逐个插入到数据库中。 4. 使用union拼接sql可能会导致问题sql过长,...

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

    在提供的示例中,我们看到如何使用MERGE语句来更新或插入数据到`t_config_related`表。假设我们要根据某个序列号(seq)来更新或插入数据: ```sql MERGE INTO t_config_related A1 USING (select '97547758-6f85-...

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

    我们可以使用以下语句来实现插入或更新: ```sql INSERT INTO tbl (columnA, columnB, columnC) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE columnA = IF(columnB &gt; 0, 1, columnA), columnB = IF(columnC &gt; 0, 1...

    oracle中merge into用法及实例解析

    例子中展示了如何使用这个模式更新和插入数据。 2. **只更新模式** 当我们只想更新已存在于目标表中的记录,而不插入新记录时,可以省略`WHEN NOT MATCHED THEN`部分。例子中,只对AID=1的记录进行了更新,而没有...

    oracle merge

    merge 详解 及实例 优点:  — 避免了分开更新  — 提高性能并易于使用  — 在数据仓库应用中十分有用  — 使用merge比传统的先判断再选择插入或更新快很多

    merge用法详解

    执行这个语句后,`test1`会被正确更新和插入数据。但是,如果`test2`中有重复的匹配条件,比如`id=2`的记录,`MERGE`会抛出错误,因为它无法确定应该更新还是插入。在这种情况下,必须确保源数据的唯一性,或者通过...

    oracle数据匹配merge into的实例详解

    Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...

Global site tag (gtag.js) - Google Analytics