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

SQLite银行交易表:如何校验新插入行余额与最后一行的关联?

SQLite触发器语法错误修正方案

原代码存在三个核心问题:

  • 括号不匹配:子查询末尾多了一个冗余右括号
  • 列引用错误:应检查NEW.Saldo(新插入行的saldo值),而非表中已存在的Saldo列
  • 未处理空表场景:首次插入时无历史行,子查询返回NULL,需默认初始余额为0

修正后的触发器代码:

CREATE TRIGGER ChecarSaldo
BEFORE INSERT ON BANORTE
BEGIN
  SELECT RAISE(FAIL, 'NO ES EL SIGUIENTE MOVIMIENTO')
  WHERE NEW.Saldo != COALESCE((SELECT Saldo FROM BANORTE ORDER BY fecha DESC LIMIT 1), 0) + NEW.cargo - NEW.abono;
END;

关键调整说明:

  • 用WHERE替代原代码的FROM BANORTE WHEN,无需从表中查询行,仅做条件判断即可
  • COALESCE函数确保首次插入时,默认初始余额为0,避免NULL值导致的计算异常
  • 条件改为不等于时触发错误,逻辑更准确:当新行的saldo不符合预期计算值时,抛出失败提示

内容的提问来源于stack exchange,提问作者Patricio Sosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:35:54