2012-08-28 58 views
2

我有创造的sqlite3这个触发second_loop问题: 它是更多的代码的一部分,但它是一个的错误,给这个确切的一部分。 当我执行数据库I得到以下的代码:近“CREATE”:语法错误不能CREATE TRIGGER在sqlite3的

我相信触发器内的部分工作以及我单独测试,但必须有一些其他种类的问题与此有关。

请注意,我有相同的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; 
+0

显然,SQLite不喜欢CREATE触发器中TEMP表;你可以使用一个“正常”的表,而只是在你的触发器的开始删除它的所有行? –

+0

我摆脱了TEMP表,并使用“正常”的,仍然有相同的错误! – lyes

回答

3

的SQLite3的CREATE TRIGGER statement根据syntax diagram不支持嵌入式CREATE TEMP TABLE substatements。

+0

我摆脱了TEMP表,并使用“正常”的,仍然有相同的错误! – lyes

+0

按照Doug的链接documenation - 看起来好像sqlite的触发器只能包含更新,插入,删除和select语句。 –

+0

问题修复!谢谢! – lyes

相关问题