MALOUDA-PSA 2025-03-09 20:54 采纳率: 85.6%
浏览 4

MySQL触发器的问题3


 
DELIMITER $$
 
CREATE TRIGGER update_fxj_before_update
after UPDATE ON fxj
FOR EACH ROW
BEGIN
    -- 仅当 stknew 发生变化时执行
    IF NEW.stknew <> OLD.stknew OR (NEW.stknew IS NULL AND OLD.stknew IS NOT NULL) OR (NEW.stknew IS NOT NULL AND OLD.stknew IS NULL) THEN
        -- 更新 c2exp12 的逻辑
        IF old.expma12 = 0 THEN
            SET c2exp12 = 100;
        ELSE
            SET c2exp12 = (NEW.stknew - NEW.expma12) / NEW.expma12 * 100;
        END IF;
 
        -- 更新 c2exp50 的逻辑
        IF old.expma50 = 0 THEN
            SET c2exp50 = 100;
        ELSE
            SET c2exp50 = (NEW.stknew - NEW.expma50) / NEW.expma50 * 100;
        END IF;
    END IF;
END$$
 
DELIMITER ;

上面的触发器是希望在 表 fxj 里面 当 fxj.stknew 更新时, 就更新 c2exp12, c2exp12 里面的值, (stknew - expma12) / xpma12 , 其中 stknew, expma12, expma50都是同一张表里面的列 , 现在报错:
1193 - Unknown system variable 'c2exp12'
时间: 0.011s

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-09 20:54
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    MySQL 触发器的问题

    你创建了一个名为 update_fxj_before_update 的触发器,用于在 fxj 表的更新操作之前执行某些逻辑。然而,触发器的定义中缺少了 END 语句,导致语法错误。

    解决方案:

    DELIMITER $$
    CREATE TRIGGER update_fxj_before_update
    after UPDATE ON fxj
    FOR EACH ROW
    BEGIN
        -- 你的逻辑代码
    END$$
    DELIMITER ;
    

    在上面的代码中,我们添加了 END 语句来结束触发器的定义。同时,我们还需要使用 DELIMITER 语句来指定语句结束符,以避免语法错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日