2016-04-29 62 views
0

這是我試圖爲視圖創建的更新觸發器。這是很清楚我想要實現:更新中令牌未知錯誤觸發器

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 -Token未知 - 線3,列29 - ;

回答

1

問題是這一行:

DECLARE VARIABLE NEW_TYPE_ID; 

您還沒有指定的NEW_TYPE_ID的類型,所以聲明是不完整並且分號在該位置意外,這導致標記未知錯誤。

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; 
0

最好的辦法是把它作爲

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 ; !! 
相關問題