SQLite CASE/WHEN语句 [英] SQLite CASE/WHEN statement

查看:1607
本文介绍了SQLite CASE/WHEN语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的CASE/WHEN语句.但正如您可能看到的那样,我得到了这个错误.我不知道为什么 我要做的就是检测MAJKA字段中的某些内容何时发生更改.因此,如果MAJKA列中的其他一些字段为空,请不要触摸它们,而是将值更改为MAJKA列中不为空的那些字段的新值.

this is my CASE/WHEN statement. But as you may see I get this error. I don't know why. All I want to do is detect when something in field MAJKA is changed. So if some other fields of column MAJKA are empty don't touch them, but change the value to new value of those fields of column MAJKA which are NOT empty.

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;

推荐答案

SQLite没有通用的机制来有条件地执行命令. 但是,在触发器中,可以在整个触发器上使用WHEN条件:

SQLite has no general mechanism to execute commands conditionally. However, in triggers, you can use a WHEN condition on the entire trigger:

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.)

(The first UPDATE is the same in both cases and thus does not need a WHEN.)

这篇关于SQLite CASE/WHEN语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆