PL/SQL执行UPDATE语句报ORA-00905 missing keyword错误如何解决
ORA-00905错误原因与修复方案
错误产生原因
你的SQL存在两处语法问题直接触发了ORA-00905报错:
CASE表达式语法不完整,缺少必须的END结束关键字- 语法逻辑错误:
CASE是单值表达式,仅能返回一个值用于单个列的赋值,你在THEN 'E'后直接用逗号拼接last_update_time=sysdate的多列赋值逻辑,违反了Oracle的SQL语法规则。
修复方案
调整SET子句的结构,将两个字段的赋值逻辑拆分,各自使用独立的CASE表达式控制,修复后的完整SQL如下:
UPDATE XXBBBY_WEEK_DATA_CNV_STG SET process_status = CASE WHEN error1 = 'No week data Details found' THEN 'E' WHEN error1 = 'Processed successfully' THEN 'P' ELSE process_status -- 保留不符合条件的原值 END, last_update_time = CASE WHEN error1 = 'No week data Details found' THEN sysdate ELSE last_update_time -- 保留不符合条件的原值 END WHERE process_status = 'N';
核心修改点说明
- 为
process_status对应的CASE表达式补全END关键字,闭合表达式 - 将
last_update_time的赋值逻辑拆分出来作为独立的赋值项,同样用CASE表达式控制更新规则 - 新增
ELSE分支保证不匹配条件的字段保留原有值,避免非预期的空值覆盖
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

