【问题标题】:Oracle MERGE does not INSERTOracle MERGE 不插入
【发布时间】:2011-01-21 03:14:51
【问题描述】:

我有这个简单的例子,我似乎无法开始工作:

MERGE INTO mytable  mt
USING dual
ON (mt.id = 'AAA' )  
WHEN MATCHED THEN 
    UPDATE SET mt.name = 'updated'
WHEN NOT MATCHED THEN 
    INSERT (mt.id , mt.name )
    VALUES ('AAA', 'Gooood' );

如果表中存在“AAA”记录,则更新成功。

但如果不存在,则不插入:

Affected rows: 0
Time: 0.003ms

关于我做错了什么的任何线索?

【问题讨论】:

  • 您使用什么工具响应“受影响的行:0 时间:0.003ms”?
  • 有人想知道 OP 是否在一个会话中没有提交就合并并从另一个会话查询。或者现有应用程序是否正确解释 SQL%ROWCOUNT 模拟的输出。
  • 您的表mytable 是否可能不仅仅需要idname 才能进行有效插入?
  • @Tony Andrews : 抱歉回答晚了,我不得不换一种方式……我当时使用的工具是 Navicat for Oracle。

标签: sql oracle merge replace upsert


【解决方案1】:

为我工作:

SQL> create table mytable (id varchar(3), name varchar(30));

Table created.

SQL> MERGE INTO mytable  mt
  2  USING dual
  3  ON (mt.id = 'AAA' )  
  4  WHEN MATCHED THEN 
  5      UPDATE SET mt.name = 'updated'
  6  WHEN NOT MATCHED THEN 
  7      INSERT (mt.id , mt.name )
  8      VALUES ('AAA', 'Gooood' );

1 row merged.

SQL> select * from mytable;

ID  NAME
--- ------------------------------
AAA Gooood

【讨论】:

  • 我使用 Oracle 9.2 ...我听说 MERGE 功能在 Oracle 10 上“更好”:-/
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多