如何在JS包装器中编写sqlite触发器

how to write a sqlite trigger in JS wrapper

本文关键字:sqlite 触发器 JS 包装      更新时间:2023-09-26

让我们假设两个表:表1[idTble1,elmt1_T1,elmt2_T1]表2[idTble2,id_Tble1,elmt1_T2,索引]我想创建一个在Insert On table1之后运行的触发器,并在表2中插入一个新行,其中

id_Tble1 = new.idTble1
elmt1_T2 = new.elmt1_T1

index是用户设置的值,只保存在表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);
    });

但我得到了一个错误(无法准备语句("REFERENCING"附近的1:语法错误)。

几个小时后,我至少部分工作了。我不得不承认,软件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中创建一个新字段(index)。