我有一個刪除標誌一個簡單的表(記錄應在此列中更新,而不是刪除):ORA-38104:在ON子句中引用的列不能更新
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 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-服務器它的偉大工程,但Oracle說:
ORA-38104: Columns referenced in the ON Clause cannot be updated: TARGET.ISDELETED
如果沒有與IDELETED = 0匹配的記錄,我想主鍵違規作爲例外,這就是爲什麼我無法將「on-clause」中的「TARGET.ISDELETED = 1」移動到update-statement。
我在SQL Server(和可恥的是甲骨文:) – onedaywhen 2011-05-06 10:47:05
感謝上偉大的作品確認,我已經改變了命令,如下所示: '開始 更新ET.PSEUDODELETETETABLE set ISDELETED = 0,NAME ='Horst' 其中ISDELETED = 1且ID = 1;如果(sql%rowcount = 0),則 插入到ET.PSEUDODELETETABLE值(1,'Horst',0); end if; end;' – FreeAndNil 2011-05-06 13:47:09