Tablodaki bir güncelleştirme için bir tetikleyici oluşturmaya çalışıyorum. Tetikleyicilerin normal kullanımı görünümlerdir, ancak Sqlite kılavuzu, tetikleyici yerine tabloların da geçerli olduğunu söylemektedir. Ancak hatayı alıyorum: , tablosunda INSTEAD OF tetikleyicisi oluşturamaz. Ve nedenini merak ediyorum.Sqlite Hatası: Neden tablodaki INSTEAD OF tetikleyicisi oluşturamıyor?
Ben yabancı tuşlarını kullanın:
PRAGMA foreign_keys = ON;
Ve İki tablo var. Bir tanımlayıcı tablosu:
CREATE TABLE id
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP
);
Ve tanımlayıcıları başvuran bir tablo:
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)
);
takın çalışıyor:
INSERT INTO id DEFAULT VALUES;
INSERT INTO person (login) VALUES ('root');
SELECT * FROM person;
1|root|||||2012-02-28 18:03:45
Şimdi bir güncelleme dönüştürür aşağıdaki tetiği, tanımlamak istediğiniz bir ek içine:
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;
Ama yukarıdaki hata ile başarısız ve neden anlamıyorum.
INSTEAD OF UPDATE ON
yazdığınız:
INSTEAD OF UPDATE OF
Hayır, bu yanlış. Sözdizimi, sütun adı ON tablo adı GÜNCELLENMESİ'NDİR. Buraya bakın: http://sqlite.org/lang_createtrigger.html – ceving