gpt4 book ai didi

firebird - token 未知 - 结束触发 Firebird

转载 作者:行者123 更新时间:2023-12-04 14:49:45 24 4
gpt4 key购买 nike

我尝试使用此语法在 Firebird ISQL 工具中创建触发器,但我收到此消息错误:

Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 6, column 1
-end
CREATE TRIGGER dataweb_inve
ACTIVE AFTER INSERT POSITION 0
ON INVE01
AS
BEGIN
INSERT INTO dataweb (CVE_ART, DESCR, EXIST, NUM_MON, CVE_BITA) SELECT CVE_ART, DESCR, EXIST, NUM_MON, CVE_BITA FROM INVE01 ORDER BY FCH_ULTCOM desc rows 1
END;

最佳答案

您的代码有两个问题:

  1. PSQL(Firebird Procedural SQL)中的语句必须以分号结束。您的插入缺少该分号,因此 Firebird 解析器在它不期望的插入语句中找到 END,并引发 token unknown 错误。
  2. ISQL - 默认情况下 - 使用分号来确定语句何时完成并可以发送到 Firebird 服务器执行。鉴于 PSQL 在内部使用分号来分隔语句,您需要指示 ISQL 使用不同的 statement terminator使用 SET TERM命令。

简而言之,您需要在 ISQL 中使用以下内容:

set term #;
CREATE TRIGGER dataweb_inve
ACTIVE AFTER INSERT POSITION 0
ON INVE01
AS
BEGIN
INSERT INTO dataweb (CVE_ART, DESCR, EXIST, NUM_MON, CVE_BITA)
SELECT CVE_ART, DESCR, EXIST, NUM_MON, CVE_BITA
FROM INVE01
ORDER BY FCH_ULTCOM desc
rows 1;
END#
set term ;#

顺便说一句,您选择要插入的行的方式相当可疑,因为 INVE01 中可能存在比触发器触发的行更新的行。如果要插入触发触发器的行的值,请使用 NEW context .

你的触发器看起来像:

set term #;
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#
set term ;#

关于firebird - token 未知 - 结束触发 Firebird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69248845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com