【问题标题】:Token unknown error in update Trigger更新触发器中的令牌未知错误
【发布时间】:2016-08-24 23:32:37
【问题描述】:

这是我尝试为视图创建的更新触发器。很清楚我想要实现的目标:

SET TERM !! ;
CREATE TRIGGER SST_Insert FOR SpaceSpaceTypes
BEFORE INSERT AS
DECLARE VARIABLE NEW_TYPE_ID;
BEGIN
NEW_TYPE_ID=(SELECT MAX(type_id) FROM SpaceTypes WHERE type_name=NEW.type_name);
INSERT INTO Space values (NEW.address,NEW.company_id,NEW.area,NEW_TYPE_ID);
END!!
SET TERM ; !!

我尝试了!!; 的不同组合。我尝试删除一个变量。它没有帮助。上面查询的错误是: 语句失败,SQLSTATE = 42000

动态 SQL 错误 -SQL 错误代码 = -104 -令牌未知 - 第 3 行,第 29 列 -;

【问题讨论】:

    标签: sql database firebird database-trigger


    【解决方案1】:

    问题出在这一行:

    DECLARE VARIABLE NEW_TYPE_ID;
    

    你没有指定NEW_TYPE_ID的类型,所以语句不完整,分号在那个位置意外,导致token unknown错误。

    DECLARE VARIABLE 的语法是:

    DECLARE [VARIABLE] <varname>
      {<datatype> | <domain> | TYPE OF {<domain> | COLUMN <rel.col>}
        [NOT NULL]  [CHARACTER SET <charset>] [COLLATE <collation>]
        [{DEFAULT | = } <initvalue>];
    

    所以至少你需要使用:

    DECLARE VARIABLE NEW_TYPE_ID INTEGER;
    

    或更高级:

    DECLARE VARIABLE NEW_TYPE_ID TYPE OF COLUMN SpaceTypes.type_id;
    

    【讨论】:

      【解决方案2】:

      最好的选择是将其保留为

         SET TERM !! ;
          CREATE TRIGGER SST_Insert FOR SpaceSpaceTypes
          BEFORE INSERT AS
          BEGIN
          INSERT INTO Space values (NEW.address,NEW.company_id,NEW.area,(SELECT        MAX(type_id) FROM SpaceTypes WHERE type_name=NEW.type_name));
      END!!
      SET TERM ; !!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多