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

您将数据操作 (DML) 语句放在需要返回值的表达式的地方。考虑:

SELECT majka,
CASE WHEN majka=''

THEN
'it is empty'

ELSE
'it is not empty'

END

这将为您提供一列,其中的值为“它是空的”或“它不是空的”,具体取决于上一列中的值。

您不能将 DML 语句放在 SQL 中的那个位置—— DML 语句不是带有值的表达式。

于 2012-12-01T00:15:35.303 回答
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 回答