oracle SQL ORA-38104在使用MERGE的UPSERT上

svdrlsy4  于 2023-05-06  发布在  Oracle
关注(0)|答案(1)|浏览(226)

我正在尝试创建一个UPSERT查询,只有当不存在具有相同CDN的元组时,才会在TEST表中插入元组,如果发生这种情况,则执行UPDATE。下面是一个片段,其中有许多尝试:

MERGE INTO TEST l
     USING (select :cn as cn from dual) ct 
     ON (ct.cn = l.CN)
  WHEN MATCHED THEN 
    UPDATE SET l.CN = :cn, l.LIVE_ENA = :liv_en, l.DATE_LIVE_UPDATE = :dtp
  WHEN NOT MATCHED THEN 
    INSERT (CN, LIVE_ENA, DATE_LIVE_UPDATE) 
    VALUES (:cn, :liv_en, :dtp);

但我总是犯同样的错误:
ORA-38104:无法更新ON子句中引用的列:“CT”.“CN”

roqulrg3

roqulrg31#

错误提示您不能更新ON子句中涉及的列,因此-删除它。

MERGE INTO TEST l
     USING (select :cn as cn from dual) ct 
     ON (ct.cn = l.CN)               --> l.cn is used here ...
  WHEN MATCHED THEN 
    UPDATE SET 
      -- l.CN = :cn,                 --> ... so remove it here 
      l.LIVE_ENA = :liv_en, 
      l.DATE_LIVE_UPDATE = :dtp
  WHEN NOT MATCHED THEN 
    INSERT (CN, LIVE_ENA, DATE_LIVE_UPDATE) 
    VALUES (:cn, :liv_en, :dtp);

但是,由于我们不知道您实际使用的值或表描述,因此可能会出现其他错误。

相关问题