2

これは私の CASE/WHEN ステートメントです。しかし、ご覧のとおり、このエラーが発生します。どうしてか分かりません。私がやりたいのは、フィールド MAJKA の何かが変更されたことを検出することだけです。そのため、列 MAJKA の他のフィールドが空の場合は、それらに触れずに、列 MAJKA の空でないフィールドの新しい値に値を変更します。

SQL Error: near "UPDATE": syntax error  <CREATE TRIGGER [test] 
AFTER UPDATE OF [MAJKA]  
ON [unos_golub] 
FOR EACH ROW 
BEGIN 

SELECT majka,
CASE WHEN majka=''

THEN
(UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka)

ELSE
(UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka
UPDATE unos_golub SET majka=NEW.majka WHERE majka=OLD.majka)
END

FROM unos_golub;
4

2 に答える 2

2

SQLite には、コマンドを条件付きで実行するための一般的なメカニズムがありません。WHENただし、トリガーでは、トリガー全体で条件を使用できます。

CREATE TRIGGER test_for_broj_goluba
AFTER UPDATE OF majka ON unos_golub
BEGIN
    UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka;
END;

CREATE TRIGGER test_for_majka
AFTER UPDATE OF majka ON unos_golub
WHEN NEW.majka <> ''
BEGIN
    UPDATE unos_golub SET majka=NEW.majka WHERE majka=OLD.majka;
END;

(最初UPDATEは両方の場合で同じなので、必要ありませんWHEN。)

于 2012-12-01T08:57:31.180 に答える
2

値を返す式が必要な場所にデータ操作 (DML) ステートメントを配置しています。検討:

SELECT majka,
CASE WHEN majka=''

THEN
'it is empty'

ELSE
'it is not empty'

END

これにより、前の列の値に応じて、値が「空です」または「空ではない」の列が表示されます。

SQL のその場所に DML ステートメントを配置することはできません。DML ステートメントは、値を持つ式ではありません。

于 2012-12-01T00:15:35.303 に答える