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

MySQL触发器异常:id_tingkatan_wewenang始终设为4,nomor_reference条件失效

MySQL触发器赋值覆盖问题修复方案

你的触发器中id_tingkatan_wewenang始终被设为4,核心原因是后续条件判断覆盖了前置赋值。虽然你在代码开头设置了nomor_reference非空时将id设为5,但如果NEW.tgl_keluar_verifikator IS NOT NULL条件成立,后续代码会强行把值重置为4,完全覆盖之前的设置。

要实现nomor_reference非空时优先设为5的需求,需要将该条件提升为最高优先级,并且在满足条件时跳过后续所有赋值逻辑。修复后的触发器代码如下:

BEGIN
  -- 最高优先级:nomor_reference非空时直接设为5,跳过后续逻辑
  IF NEW.nomor_reference IS NOT NULL THEN
    SET NEW.id_tingkatan_wewenang = 5;
    LEAVE; -- 终止触发器后续逻辑执行
  END IF;

  -- 原有的其他判断逻辑按顺序执行
  IF NEW.id_tingkatan_wewenang IS NULL THEN 
    SET NEW.id_tingkatan_wewenang = 2; 
  END IF; 

  IF NEW.tgl_keluar_verifikator IS NOT NULL THEN
    SET NEW.id_tingkatan_wewenang = 4;
  ELSEIF OLD.tgl_keluar_verifikator IS NOT NULL AND OLD.catatan_verifikator IS NOT NULL THEN
    SET NEW.id_tingkatan_wewenang=3;
  ELSEIF NEW.tgl_keluar_verifikator IS NOT NULL AND
      NEW.catatan_verifikator IS NOT NULL THEN
    SET NEW.id_tingkatan_wewenang=1; 
    
  ELSE 
    IF NEW.id_jumlah_total_tagihan = 1 THEN 
      SET NEW.id_tingkatan_wewenang = 3; 
    ELSE 
      SET NEW.id_tingkatan_wewenang = 5; 
    END IF; 

    IF NEW.id_status_k3 = 1 THEN 
      SET NEW.id_tingkatan_wewenang = 3; 
    ELSEIF NEW.id_status_k3 = 2 THEN 
      SET NEW.id_tingkatan_wewenang = 1; 
    END IF; 
  END IF;

  IF NEW.id_tingkatan_wewenang IS NULL THEN 
    SET NEW.id_tingkatan_wewenang = 2; 
  END IF;
END

关键说明

  • 使用LEAVE语句在nomor_reference非空时直接终止触发器后续逻辑,避免其他条件覆盖赋值结果
  • 调整了条件顺序,将核心需求逻辑放在最前端,确保优先级最高

内容的提问来源于stack exchange,提问作者Mr Brama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:32:05