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

TOAD环境Oracle用CASE多条件UPDATE报ORA-00905错误如何解决

错误原因分析
  • SET子句语法不符合Oracle规范:UPDATE语句的SET关键字后,多列赋值无需为每个赋值语句单独包裹括号,直接用逗号分隔多个列的赋值逻辑即可,多余的括号会触发语法解析错误。
  • CASE表达式存在多处语法问题:
    1. 简单CASE与搜索CASE逻辑混淆:原语句在CASE后指定了Expiry_DTS字段,但后续WHEN子句判断的是cd字段的值,逻辑完全不匹配,需要改为搜索CASE写法,直接在WHEN后写判断条件。
    2. THEN子句冗余:CASE表达式本身直接返回要赋值给Expiry_DTS的最终值,不需要在THEN后重复写Expiry_DTS =前缀。
    3. 括号闭合位置错误:原语句将CASE表达式的结束标识END放在了括号外侧,导致语法结构断裂。
  • 日期隐式转换风险:依赖会话级的nls_date_format隐式转换字符串为日期,容易在不同环境下因格式配置不同报错,建议显式使用TO_DATE函数做日期转换。
修正后的完整可运行脚本
-- 修改会话日期格式
ALTER SESSION SET nls_date_format = 'DD/MM/YYYY HH24:MI:SS';

-- 修正后的UPDATE语句
UPDATE Qualifications_t
SET COMMENTS = 'Task',
    Expiry_DTS = CASE
        WHEN cd = '1' THEN TO_DATE('31/12/2016 23:59:00', 'DD/MM/YYYY HH24:MI:SS')
        WHEN cd = '2' THEN TO_DATE('01/07/2019 23:59:00', 'DD/MM/YYYY HH24:MI:SS')
        WHEN cd = '3' THEN TO_DATE('31/12/1999 23:59:00', 'DD/MM/YYYY HH24:MI:SS')
        WHEN cd = '4' THEN TO_DATE('31/08/2021 23:59:00', 'DD/MM/YYYY HH24:MI:SS')
        WHEN cd = '5' THEN TO_DATE('17/06/2021 23:59:00', 'DD/MM/YYYY HH24:MI:SS')
        -- cd不在上述枚举值时保留原NULL值,可根据业务需求调整
        ELSE Expiry_DTS
    END
WHERE EXPIRY_DTS IS NULL;

-- 验证更新结果
SELECT * 
FROM QUALIFICATIONS_T
WHERE COMMENTS = 'Task';

内容的提问来源于stack exchange,提问作者Lucian Sieberhagen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:04