【问题标题】:how to write a sqlite trigger in JS wrapper如何在 JS 包装器中编写 sqlite 触发器
【发布时间】:2012-02-21 03:43:40
【问题描述】:

假设有 2 个表: 表 1[idTble1,elmt1_T1,elmt2_T1] table2[idTble2,id_Tble1,elmt1_T2,索引] 我想创建一个在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);
    });

但我收到一个错误(无法准备语句(“REFERENCING”附近的 1:语法错误)。

【问题讨论】:

  • 语法错误是因为 SQL 不是有效的 JS。看起来还有其他错误。首先,在您的 SQL 周围加上引号并将其分配给变量 createTrigger
  • 我在SQLite docs 中没有看到REFERENCING 子句。你试过没有这个子句吗?
  • 我的错,我重新编辑了我的帖子并添加了 var createTrigger = I take of REFERENCING 子句,现在错误是:(1 near ".": syntax error)
  • 新的错误是什么?下一个明显的事情是你不应该命名一个变量new,你应该将该变量传递给tx.executeSql,但仍然不足以说明。这是 Node.js 吗?
  • 从我在网上找到的,例如插入 Table1 的新元素在 Table2 Insert 中被引用为 :new.FieldName。没有 Node.js,它是客户端 JS。

标签: javascript sqlite triggers insert


【解决方案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);
    });

当我说部分时,是因为我无法让触发器在表单中使用“索引”的值。所以我要做的就是在 table1 中创建一个新字段(索引)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多