Firebird创建触发器报Token unknown -end错误如何解决
Firebird ISQL创建触发器报错SQLSTATE=42000的原因及解决方法
报错原因
- 核心语法问题:Firebird的PSQL触发器/存储过程语法要求,代码块内的每一条执行语句末尾必须加语句结束符
;,你提供的INSERT语句末尾没有添加分号,导致解析器识别到END关键字时无法匹配语法规则,抛出未知标记错误。 - 隐藏执行问题:ISQL默认将
;作为全局语句终止符,即便你补全了INSERT语句的分号,直接执行仍会被ISQL提前截断语句,同样会触发语法错误。
解决方法
步骤1:调整ISQL终止符
执行以下命令临时修改ISQL的全局语句终止符为^,避免和触发器内部的分号冲突:
SET TERM ^ ;
步骤2:执行修正后的触发器创建语句
以下是优化后的触发器代码,直接用触发器内置的NEW关键字获取刚插入INVE01表的那条数据,不需要额外查询排序,既避免了并发插入时取错数据的问题,也提升了执行性能:
CREATE TRIGGER dataweb_inve ACTIVE AFTER INSERT POSITION 0 ON INVE01 AS BEGIN INSERT INTO dataweb (CVE_ART, DESCR, EXIST, NUM_MON, CVE_BITA) VALUES (NEW.CVE_ART, NEW.DESCR, NEW.EXIST, NEW.NUM_MON, NEW.CVE_BITA); END^
如果你坚持要保留原来的查询写法,只需要在原INSERT语句末尾加
;即可正常运行。
步骤3:改回ISQL默认终止符
创建完成后执行以下命令恢复默认的分号终止符:
SET TERM ; ^
内容的提问来源于stack exchange,提问作者Roob CG
相关产品推荐
相关产品推荐

