SQLite CASE / WHEN语句

时间:2012-12-01 00:07:32

标签: sqlite triggers case

这是我的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;

2 个答案:

答案 0 :(得分: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。)

答案 1 :(得分:1)

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

SELECT majka,
CASE WHEN majka=''

THEN
'it is empty'

ELSE
'it is not empty'

END

这会为您提供一个列,其中值为“空”&#39;或者&#39;它不是空的,取决于上一栏中的值。

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