我有一个带有删除标志的简单表(应该更新此列中的记录,而不是删除):
create table PSEUDODELETETABLE
(
ID NUMBER(8) not null, -- PKEY
NAME VARCHAR2(50) not null,
ISDELETED NUMBER(1) default 0 not null
)
在插入新记录时,我必须检查是否已经存在与主键匹配但ISDELETED = 1的记录。在这种情况下,我必须将ISDELETED更改为0并更新其他列。因此,我使用下面的Merge语句:
merge into ET.PSEUDODELETETABLE TARGET
using (select 1 as ID, 'Horst' as NAME from sys.dual) SOURCE
on (TARGET.ISDELETED = 1 and SOURCE.ID = TARGET.ID)
when matched then
update set ISDELETED = 0, NAME = SOURCE.NAME
when not matched then
insert values (SOURCE.ID, SOURCE.NAME, 0);
在Sql-Server上,它工作得很好,但Oracle说:
ORA-38104: Columns referenced in the ON Clause cannot be updated: TARGET.ISDELETED
如果存在IDELETED = 0的匹配记录,我希望主键冲突成为异常,这就是为什么我不能将"TARGET.ISDELETED = 1“从on-子句移动到update-语句。
https://stackoverflow.com/questions/5900912
复制相似问题