doctor5999 2023-03-20 21:01 采纳率: 100%
浏览 14
已结题

mysql触发器语句问题


我想建一个触发器,当插入brxx表前,对插入的数据字段fbsj(data类型)进行处理,转化为“yy春”,通过newbing写出了下面的代码:

create trigger brxxfbjd
before insert on brxx 
for each row
BEGIN
    declare mm int;
    set mm=month(new.fbsj);
    case mm
    WHEN mm=3 OR mm=4 OR mm=5 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '春');
    WHEN mm=6 OR mm=7 OR mm=8 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '夏');
    WHEN mm=9 OR mm=10 OR mm=11 THEN SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '秋');
    else  SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '冬');
   END CASE;
END;

INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'xxx', '男', '浙江', '新冠', '2022-09-24' );
INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'xyz', '男', '浙江', '新冠', '2021-05-12' );
INSERT INTO brxx ( brmc, brxb, brqy, jbmc, fbsj ) 
VALUE
    ( 'wxy', '男', '浙江', '新冠', '2022-07-2' );

但是插入数据后fbjd全是冬
如图
​​

img

这是为什么?这个触发器应该怎么改?

  • 写回答

2条回答 默认 最新

  • David1055259499 2023-03-20 21:13
    关注

    触发器中出现问题的是 CASE 语句中的判断条件,应该是 WHEN mm=3 OR mm=4 OR mm=5 而不是 WHEN mm=3 OR mm=4 OR mm=5 THEN。因此,每个分支都会被执行,导致最终结果是最后一个分支所设置的结果。

    以下是修改后的代码:

    CREATE TRIGGER brxxfbjd
    BEFORE INSERT ON brxx 
    FOR EACH ROW
    BEGIN
        DECLARE mm INT;
        SET mm = MONTH(NEW.fbsj);
        CASE
            WHEN mm = 3 OR mm = 4 OR mm = 5 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '春');
            WHEN mm = 6 OR mm = 7 OR mm = 8 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '夏');
            WHEN mm = 9 OR mm = 10 OR mm = 11 THEN
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '秋');
            ELSE
                SET NEW.fbjd = CONCAT(SUBSTR(NEW.fbsj, 1, 4), '冬');
        END CASE;
    END;
    
    
    

    在上述代码中,判断条件已被纠正,以避免所有情况都被执行的问题。请注意,使用 WHEN 关键字后不需要加上 THEN。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线