SQLite触发器编写报错:无法定位FROM语句附近的语法错误
SQLite触发器语法错误排查及修复方案
现有代码错误点汇总
- 语法错误1:WHERE子句不支持直接使用
SUM()聚合函数,也不允许出现SUM(cost) FROM Employee这种非法判断结构,聚合计算必须放在SELECT子句中 - 语法错误2:表名拼写错误,关联Employee表时误用了不存在的
PlanEmployee表,实际表名为PlanEmployees - 语法错误3:表别名不匹配,Project表声明了别名
pro,后续引用却用了未声明的project.budget - 逻辑错误:未使用触发器内置的
NEW关键字关联即将插入的新行,原有逻辑是全表范围判断,完全不符合「单个计划成本校验」的需求
修复后可用代码
CREATE TRIGGER trg_ins_PlanEmployees BEFORE INSERT ON PlanEmployees BEGIN SELECT CASE WHEN ( -- 统计当前计划已绑定的所有员工成本总和 SELECT IFNULL(SUM(e.cost), 0) FROM PlanEmployees pe INNER JOIN Employee e ON pe.eID = e.eID WHERE pe.pID = NEW.pID ) + ( -- 取本次新增员工的成本 SELECT cost FROM Employee WHERE eID = NEW.eID ) > ( -- 取当前计划关联的项目预算 SELECT pro.budget FROM Project pro INNER JOIN Plan pl ON pro.projectID = pl.projectID WHERE pl.pID = NEW.pID ) THEN RAISE(ABORT, 'Over budget') END; END;
内容的提问来源于stack exchange,提问作者PMolnes
相关产品推荐
相关产品推荐

