Oracle MERGE 不会执行 INSERT 操作。

7

我有一个简单的例子,但似乎无法正常运行:

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.003毫秒”? - Tony Andrews
有人想知道 OP 是否在一个会话中合并而没有提交,然后从另一个会话中查询。或者现有的应用程序是否正确解释了来自 SQL%ROWCOUNT 的模拟输出。 - Adam Musch
你的表mytable是否需要除了idname之外的其他信息才能进行有效的插入操作? - Doug Porter
@Tony Andrews:抱歉回复晚了,我得用另一种方式解决了... 当时我使用的工具是Navicat for Oracle。 - Jalil
1个回答

8

适用于我:

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... 我听说在Oracle 10上MERGE函数更“好” :-/ - Jalil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接