1

layerSQLite には、 with columnsというツリー構造のテーブルがあります(id, ..., parentId)dirそして、列で呼び出される通常のテーブル(id, ..., modifiedTime)。状況は次のとおりです。

のいくつかの行dirが新しい modifiedTime で更新されると、それらのすべての親も更新される必要があります。modifiedTime が減少しないことを保証します。

トリガーがなければ、この sql を使用して (WITH RECURSIVE 句を使用して) 実行できます。

WITH RECURSIVE P(id) AS (
     SELECT parentId FROM layer WHERE id="The Id of Modified Row"
     UNION ALL
     SELECT L.parentId FROM layer AS L, P WHERE L.id=P.id)
UPDATE dir SET modifiedT=CURRENT_TIMESTAMP WHERE id IN P;

しかし、SQL をトリガーに入れると、UPDATE ステートメントでエラーが発生します。SQLiteの公式ドキュメントを読んだ後、私はそれを得ましたThe WITH clause cannot be used within a CREATE TRIGGER.

それが問題だ

トリガーを自分のやりたいようにするにはどうすればよいですか?

つまり、トリガー内の「WITH」句を置き換える方法は?

4

1 に答える 1