1

トリガーの RAISE 関数に小さな問題があります。これは私のSQLiteコードです:

CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
RAISE(ABORT, 'End_date must be in the future');
END;

Start_dateend_dateSMALLDATETIMEStart_date結果ですdatetime('now')

Python 2.7プログラムで他のすべてのSQLスクリプトを使用して実行するとsqlite3.complete_statement()Syntax Error near RAISE. 誰かが理由を教えてもらえますか? トリガーでorの代わりに ,ABORTを試しましたが、それでもエラーが発生します。ROLLBACKABORTSELECT CASEWHEN THEN

4

1 に答える 1

1

RAISE()は SQL 関数なので、ステートメントの一部として使用する必要があります。s 、、またはステートメントTRIGGERのみを許可します。で使用します:UPDATEINSERTDELETESELECTSELECT

CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
SELECT RAISE(ABORT, 'End_date must be in the future');
END;

これにより、エラーが正しくトリガーされます。

sqlite> insert into mytable values ('2030-1-1 20:20:20', datetime('now'));
Error: End_date must be in the future
于 2014-01-15T16:56:05.623 に答える