`

Merge Into 不能执行Insert的原因

SQL 
阅读更多

语法:

 

MERGE INTO  [your table-name] [rename your table here]

USING  ( [write your query here] )[rename your query-sql and using just like a table]

ON  ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]
 

这个语句在处理具有主从关系的表时没丝毫问题。我以前用的时候都是多表操作。我今天实现在一个表里面Merge into时却出了问题,研究了好久,终于搞定。

 

错误的sql语句:

merge  into XJ_BK_FZY_TIMESET


  a

 using (select zxnj from XJ_BK_FZY_TIMESET



 where zxnj = '2006') b on (b.zxnj='2006')

  when matched then update set a.endtime = '20100519'  where a.zxnj = '2004' 

   when not matched then insert(a.zxnj, a.endtime) values('2006', '20100519') 

 注: XJ_BK_FZY_TIMESET(学籍_本科_分专业_时间设置):表中只有两个字段:zxnj:在学年级,endTime:截止时间。

 

这个sql的目的是XJ_BK_FZY_TIMESET表中存在zxnj=2006的数据时,执行update操作,否则执行insert操作。

这个sql从语法上是没错的而且程序是能够执行的

 

XJ_BK_FZY_TIMESET现在没有数据,执行上面的sql后,仍没有数据。手工插入一条zxnj=2006的数据后这条sql却能执行update操作。

 

错误原因:

 Merge Into执行时,会从using 搜出来的结果逐条与 on条件匹配,然后决定是update还是Insert。

所以using后面的sql没有查询到数据这个Merge Into语句是不会执行update和Insert操作的。

 

 

单表操作时建议写成两个SQL

 

 

 

3
1
分享到:
评论

相关推荐

    Merge Into 语句代替InsertUpdate

    非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者

    Mybatis批量foreach merge into的用法

    首先,需要使用Oracle 9i及其以后版本支持的merge into语句,该语句可以实现insertOrUpdate的功能。然后,使用Mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表。foreach的 ...

    Oracle merge into用法

    在Oracle 9i中,`MERGE INTO`语句首次被引入,它允许在同一语句中执行`INSERT`和`UPDATE`操作。到了Oracle 10g,这个功能得到了进一步增强,使其更加强大和灵活。通过`MERGE INTO`,可以基于源表和目标表之间的匹配...

    Merge into的使用详解

    在SQL语言中,`MERGE INTO`语句是一种强大的工具,用于合并两个数据集,它允许根据特定条件将数据从一个源(通常是临时表或视图)插入或更新到目标表。这个操作通常被称为“合并”或“ Upsert”,因为它可以实现插入...

    oracle merge into的使用

    在Oracle 9i版本中,Merge Into 的引入使得开发者能够同时执行更新(UPDATE)和插入(INSERT)操作,而到了Oracle 10g及后续版本,这一功能得到了进一步增强,提供了更丰富的条件选择和操作选项。 ### 知识点详述:...

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

    通过 Merge Into 语句,我们能够在一个语句中对一个表同时执行 Insert 和 Update 操作,根据这个表或子查询的连接条件对另一个表进行查询,连接条件匹配上的进行 Update 操作,并且在其后面还可以接删除操作,无法...

    Oracle中merge into的使用

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

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

    - 基本语法:`MERGE INTO 目标表 USING 来源表 ON (匹配条件) WHEN MATCHED THEN UPDATE SET 更新列 = 新值 WHEN NOT MATCHED THEN INSERT (插入列) VALUES (插入值);` - `WHEN MATCHED THEN`部分定义了当源表和...

    oracle Merge 函数.doc

    1. 在 Merge 语句中,update 不能用于更新连接的列。例如: ```sql MERGE INTO merge_test2 M USING merge_test1 N ON (M.a = N.a) WHEN MATCHED THEN UPDATE SET M.a = N.b, M.b = N.b WHEN NOT MATCHED THEN ...

    oracle中merge into用法及实例解析

    虽然`MERGE INTO`本身不直接支持删除操作,但可以通过在`WHEN MATCHED THEN`部分使用`DELETE`语句结合特定条件来实现,例如删除不再存在于源表中的目标表记录。 通过这些用法,我们可以高效地管理数据,并在单个...

    merge用法详解

    `MERGE`语句在Oracle数据库中是一种非常实用的DML操作,它结合了`INSERT`、`UPDATE`和`DELETE`的功能,使得在处理数据时更加高效且简洁。这个语句自Oracle 9i版本开始引入,主要用于解决在两个数据源之间进行有条件...

    merge用法详解(实例详解)

    【知识点详解】 `MERGE`语句是数据库操作中一种非常强大的工具,它结合了`INSERT`, `UPDATE`, 和 `DELETE`的功能,可以一次性处理...在数据库管理和ETL过程中,合理运用`MERGE`能有效地提高数据处理的效率和准确性。

    oracle merge 用法详解

    1. **UPDATE或INSERT子句成为可选项**:与Oracle 9i不同的是,在Oracle 10g中,`MERGE`语句允许用户只指定`UPDATE`或`INSERT`中的任意一个操作。 2. **支持WHERE子句**:在`UPDATE`和`INSERT`子句后可以添加`WHERE`...

    Oracle MERGE INTO的用法示例介绍

    1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作 — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 2)MERGE语句的...

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

    在给定的实例中,`MERGE INTO`被用来解决特定的业务需求,涉及两个具有相同结构但数据可能不完全匹配的表:一个正式表(Z_TABLE)和一个临时表(L_TABLE)。 首先,我们要理解`MERGE INTO`的基本语法: ```sql ...

    Oracle_merge

    MERGE INTO target_table USING source_table ON (merge_condition) WHEN MATCHED THEN UPDATE SET column1 = value1, column2 = value2, ... WHEN NOT MATCHED THEN INSERT (column1, column2, ...) VALUES ...

Global site tag (gtag.js) - Google Analytics