Как написать триггер sqlite в оболочке JS - PullRequest
1 голос
/ 21 февраля 2012

Давайте предположим, что 2 таблицы: table1 [idTble1, elmt1_T1, elmt2_T1] table2 [idTble2, id_Tble1, elmt1_T2, index] Я хочу создать триггер, который запускается после Insert On table1, и вставить новую строку в Table2, где

id_Tble1 = new.idTble1
elmt1_T2 = new.elmt1_T1

, а индекс - это значение, установленное пользователем, которое сохраняется только в таблице 2.Я пробовал следующее

var createTrigger = "CREATE TRIGGER triggerInsert AFTER INSERT ON Table1 REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN INSERT INTO Table2 (id_Tble1, elmt1_T2, index) VALUES (:new.idTble1, :new.elmt_T1, ?); END;";
db.transaction(function(tx) {
    tx.executeSql(createTrigger, [i], null, onError);
    });

, но я получил ошибку (не смог подготовить оператор (1 рядом с "REFERENCING": синтаксическая ошибка).

1 Ответ

1 голос
/ 21 февраля 2012

Через несколько часов я заработал, хотя бы частично. Я должен признать, что программное обеспечение SQLiteManager, даже в демо-версии, было полезно при отладке кода. Вот триггер, который работает:

var createTrigger = "CREATE TRIGGER triggerInsert AFTER INSERT ON Table1 BEGIN INSERT INTO Table2 (id_Tble1, elmt1_T2, index) VALUES (new.idTble1, new.elmt_T1, new.index); END";
db.transaction(function(tx) {
    tx.executeSql(createTrigger, [], null, onError);
    });

Когда я говорю частично, это потому, что я не смог заставить триггер использовать значение 'index' в форме. Поэтому мне нужно было создать новое поле (индекс) в таблице 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...