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

时间:2012-02-21 03:43:40

标签: javascript sqlite triggers insert

我们假设有两个表: 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

和index是用户设置的值,仅保存在Table2中。 我试过以下

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 个答案:

答案 0 :(得分: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'的值。所以我要做的是在table1中创建一个新的字段(索引)。