标签: ora-38104

ORA-38104:无法更新ON子句中引用的列

我有一个带删除标志的简单表(记录应该在此列中更新而不是删除):

create table PSEUDODELETETABLE
(
  ID        NUMBER(8) not null, -- PKEY
  NAME      VARCHAR2(50) not null,
  ISDELETED NUMBER(1) default 0 not null
)
Run Code Online (Sandbox Code Playgroud)

插入新记录时,我必须检查是否已存在与主键匹配但是ISDELETED = 1的记录.在这种情况下,我必须将ISDELETED更改为0并更新其他列.因此我使用以下Merge-Statement:

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);
Run Code Online (Sandbox Code Playgroud)

在Sql-Server上它运行良好,但Oracle说:

ORA-38104: Columns referenced in the ON Clause cannot be updated: TARGET.ISDELETED …
Run Code Online (Sandbox Code Playgroud)

sql oracle merge ora-38104

27
推荐指数
3
解决办法
4万
查看次数

合并时如何避免ORA-3814错误?

我有这样的代码

MERGE INTO target_table tgt
USING source_table src
on(tgt.c1=src.c1)
WHEN MATCHED THEN
UPDATE SET tgt.c1=src.c2
Run Code Online (Sandbox Code Playgroud)

我得到ORA-38104: Columns referenced in the ON clause cannot be updated.我理解这个错误的原因.但是我们怎样才能重写这段代码呢?没有使用光标有没有可能吗?

oracle merge ora-38104

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

merge ×2

ora-38104 ×2

oracle ×2

sql ×1