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
相关产品推荐
相关产品推荐

