2

sqlite3でこのトリガーsecond_loopを作成する際に問題があります。これはより多くのコードの一部ですが、エラーを発生させるのはこの正確な部分です。データベースでコードを実行すると、次のようになります。 「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;
4

1 に答える 1

3

SQLite3のCREATE TRIGGERステートメントは、シンタックスダイアグラムCREATE TEMP TABLEによる埋め込みサブステートメントをサポートしていません。

于 2012-08-28T15:54:35.860 に答える