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

MySQL存储过程CASE函数UPDATE语句语法错误排查求助

问题排查与修正方案

错误原因分析

  1. CASE表达式语法误用:你采用了CASE 'offz'这类简单CASE格式,但后续WHEN子句是条件判断(如off_tz='EDT'),不符合简单CASE的语法规则(简单CASE要求WHEN后是与CASE后表达式匹配的单一值),需改用搜索式CASE表达式。
  2. UPDATE语句多余别名:UPDATE的SET子句中,给CASE结果添加AS 'offz'属于无效语法,SET的格式为字段 = 计算值,不需要额外别名。
  3. 存储过程分隔符冲突:MySQL默认以分号;作为语句结束符,存储过程内部的UPDATE语句已使用分号,会导致MySQL提前终止存储过程定义,进而触发END附近的语法错误,需临时修改分隔符。

修正后的存储过程代码

DELIMITER //

CREATE PROCEDURE process_flight_log_staging_doug()
BEGIN
    UPDATE `flight_log_staging_emt` 
    SET `off_z` = 
        CASE
            WHEN `off_tz`='EDT' THEN `off_lcl`+INTERVAL 4 HOUR
            WHEN `off_tz`='CDT' OR `off_tz`='EST' THEN `off_lcl`+INTERVAL 5 HOUR
            WHEN `off_tz`='MDT' OR `off_tz`='CST' THEN `off_lcl`+INTERVAL 6 HOUR
            WHEN `off_tz`='PDT' OR `off_tz`='MST' THEN `off_lcl`+INTERVAL 7 HOUR
            WHEN `off_tz`='PST' THEN `off_lcl`+INTERVAL 8 HOUR
            ELSE `off_z` 
        END;

    UPDATE `flight_log_staging_emt` 
    SET `on_z` = 
        CASE
            WHEN `on_tz`='EDT' THEN `on_lcl`+INTERVAL 4 HOUR
            WHEN `on_tz`='CDT' OR `on_tz`='EST' THEN `on_lcl`+INTERVAL 5 HOUR
            WHEN `on_tz`='MDT' OR `on_tz`='CST' THEN `on_lcl`+INTERVAL 6 HOUR
            WHEN `on_tz`='PDT' OR `on_tz`='MST' THEN `on_lcl`+INTERVAL 7 HOUR
            WHEN `on_tz`='PST' THEN `on_lcl`+INTERVAL 8 HOUR
            ELSE `on_z` 
        END;
END //

DELIMITER ;

关键修正点说明

  • 移除CASE后的'offz'和'onz'字符串,改用搜索式CASE,直接在WHEN后编写条件判断,符合MySQL语法规范。
  • 删除UPDATE语句中CASE结尾的AS 'offz'和AS 'onz',消除无效语法。
  • 添加DELIMITER //临时修改语句分隔符,避免存储过程内部的分号提前终止定义,最后恢复默认分隔符DELIMITER ;。

内容的提问来源于stack exchange,提问作者Brian Douglas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 07:07:32