You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle MERGE更新语句报‘ON关键字缺失’错误,求排查解决

解决Oracle MERGE语句报“ON关键字缺失”的问题

你的MERGE语句报错的根源是子查询内重复使用了目标表的别名a——外层MERGE的目标表per_alt_identifier别名为a,子查询里又把同一张表的别名也设为a,这会导致Oracle解析时混淆标识符,进而无法正确识别ON子句的关联逻辑,最终抛出“ON关键字缺失”的错误。

修正后的语句(把子查询内的表别名改为a_sub,避免冲突):

merge into per_alt_identifier a
 using 
  (
  select 
  a_sub.CD_PER_ALT_IDENTIFIER,
  case 
    when b.UNLIMITED_EXPIRATION = 1 then to_date('99991231','yyyymmdd')
    else to_date(substr(b.DATE_OF_ISSUE_EXPIRY,1,8),'yyyymmdd')
  end as dt_expiration_new
  from per_alt_identifier a_sub
  INNER JOIN PER_ALT_IDENT_TYPE t 
  on a_sub.ID_PER_ALT_IDENT_TYPE = t.ID_PER_ALT_IDENT_TYPE
  inner join ORA_PER_RESID b
  on a_sub.CD_PER_ALT_IDENTIFIER = b.PERMIT_NUMBER
  )b
on a.CD_PER_ALT_IDENTIFIER = b.CD_PER_ALT_IDENTIFIER
when matched then update set a.dt_expiration = b.dt_expiration_new;

另外可以留意:如果子查询仅用于关联其他表计算更新值,也可以考虑改用关联更新的写法,但修正别名的方式已经能直接解决当前报错问题。

内容的提问来源于stack exchange,提问作者cautis anca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:03:23