2016-04-29 16 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 ; !!