sql - 无法在 SQLite3 中创建触发器

标签 sql sqlite triggers syntax-error

我在 sqlite3 中创建此触发器 secondary_loop 时遇到问题: 它是更多代码的一部分,但正是这个部分给出了错误。 当我在数据库上执行代码时,我得到以下信息:near“CREATE”:语法错误

我确信触发器内部的部分工作良好,因为我已经单独测试了它,但一定存在其他类型的问题。

请注意,我在同一个 SQL 中有另一个触发器,并且它工作得很好!

请指教,谢谢

CREATE TRIGGER second_loop AFTER UPDATE OF stack_count ON global WHEN NEW.stack_count<>0

BEGIN
 CREATE TEMP TABLE last_row(id INTEGER PRIMARY KEY, unvisited INTEGER DEFAULT 1, predecessor INTEGER DEFAULT 0, discovery INTEGER DEFAULT 0, finish INTEGER DEFAULT 0);

 INSERT INTO last_row
        SELECT *
        FROM nodes
        WHERE id = (SELECT node_id
                   FROM stack
                   ORDER BY oid DESC LIMIT 1);

 UPDATE last_row SET unvisited =0, predecessor = (SELECT parent_id FROM global), discovery = (SELECT time FROM global);

 UPDATE global SET current_id = (SELECT node_id FROM stack WHERE ROWID = (SELECT MAX(ROWID) FROM stack));
 UPDATE global SET time = time + 1;

 DELETE FROM stack WHERE ROWID = (SELECT MAX(ROWID));

 INSERT INTO stack(node_id)
   SELECT DISTINCT edges.target_id
   FROM nodes, edges, global
   WHERE edges.source_id=global.current_id AND nodes.unvisited=1;

  -- update stack count to go to second_loop trigger
  UPDATE global SET stack_count = stack_count + 1;
 END;

最佳答案

SQLite3 的 CREATE TRIGGER statement根据 syntax diagram 不支持嵌入式 CREATE TEMP TABLE 子语句.

关于sql - 无法在 SQLite3 中创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162162/

相关文章:

python - SQLite:仅返回每个组中的前 2 个结果

iphone - 如何查看在iphone应用程序中运行的sqlite文件中的数据?

c# - 使用多个文件中的任何CPU(x64/x86)

oracle - 查找当前正在运行的作业的作业ID/只允许单个作业更新表

php - MySQL - 触发器调用两次导致死锁

mysql - 如何在 MYSQL 中删除时更新同一张表?

MySQL : find repeating events that are outdated

java - 如何使用存储为毫秒 Postgres 的日期的月份进行分组

SQL - 如何为每个团队计算三个不同的百分比

MySQL 触发器 - 将 SELECT 存储在变量中