テーブルの更新の代わりにトリガを作成しようとしています。代わりのトリガーの通常の使用はビューですが、Sqliteのマニュアルによれば、トリガーの代わりにトリガーもテーブルに対して有効です。しかし、私はエラーが発生します:テーブルにトリガのINSTEADを作成できません。そしてなぜ私は不思議に思っています。なぜSqliteエラー:テーブルのINSTEAD OFトリガを作成できませんか?
私は外部キーを使用します。
PRAGMA foreign_keys = ON;
をそして私は2つのテーブルを持っています。識別子テーブル:
CREATE TABLE id
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP
);
と識別子参照表:
CREATE TABLE person
(
id INTEGER NOT NULL DEFAULT (last_insert_rowid()) REFERENCES id,
login TEXT,
password TEXT,
firstname TEXT,
lastname TEXT,
email TEXT,
created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, created)
);
挿入が正常に動作しますが:
INSERT INTO id DEFAULT VALUES;
INSERT INTO person (login) VALUES ('root');
SELECT * FROM person;
1|root|||||2012-02-28 18:03:45
今、私は更新を変換し、次のトリガを、定義したいですインサートに:
CREATE TRIGGER person_update INSTEAD OF UPDATE OF login, password, firstname, lastname, email ON person
BEGIN
INSERT INTO person (login, password, firstname, lastname, email)
VALUES (new.login, new.password, new.firstname, new.lastname, new.email);
END;
しかし、上記のエラーで失敗し、なぜ私は理解していません。
これは間違っています。構文は、INSTEAD OF UPDATE OF列名ONの表名です。こちらをご覧ください:http://sqlite.org/lang_createtrigger.html – ceving