2016-11-11 5 views
0

誰かがMySQLからSQLiteへの更新前のトリガーを翻訳する手助けをすることができますか?ここではMySQLのトリガーです:SELECT RAISE(ABORT, 'Error.')MySQLのトリガーをSQLiteに変換する

しかし、私は苦労の理解を持っています、他の構文エラーがあります。

CREATE TRIGGER trigger_name 
    BEFORE UPDATE ON `table_name` 
    FOR EACH ROW 
BEGIN 
    IF (NEW.fk IS NOT NULL AND NEW.status < 50) 
    THEN 
    BEGIN 
     DECLARE obj_count INT(11); 
     SELECT COUNT(*) 
     INTO obj_count 
     FROM (SELECT id FROM table_name 
          WHERE `status` < 50 AND fk = NEW.fk 
          LIMIT 1) AS objs; 
     IF (obj_count > 0) 
     THEN 
     SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = "Error."; 
     END IF; 
    END; 
    END IF; 
END 

私undesrstandingは、SIGNAL文は次のように書き換える必要があるということです。

答えて

0

SQLite triggersはどちらもIFもDECLAREがあります:(。BEFORE UPDATE OF fk, status ON table_name、より効率的かもしれません)

CREATE TRIGGER trigger_name 
BEFORE UPDATE ON table_name 
FOR EACH ROW 
WHEN NEW.fk IS NOT NULL 
AND NEW.status < 50 
BEGIN 
    SELECT RAISE(ABORT, "Error.") 
    WHERE EXISTS (SELECT id 
        FROM table_name 
        WHERE status < 50 
        AND fk = NEW.fk); 
END; 

関連する問題