2012-12-01 288 views
1

這是我的CASE/WHEN語句。但正如你可能看到我得到這個錯誤。我不知道爲什麼。 我想要做的就是檢測MAJKA領域的某些變化。因此,如果列MAJKA的其他字段爲空,請不要觸摸它們,但請將值MAJKA的這些字段的值更改爲不爲空的新值。SQLite CASE/WHEN語句

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; 

回答

1

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

+0

幫我謝謝。 我用OLD.majka =''和OLD.majka!=''來檢查字段是否爲空或不是 – FosAvance

1

您正在將數據操縱(DML)語句放在需要返回值的表達式的地方。試想一下:

SELECT majka, 
CASE WHEN majka='' 

THEN 
'it is empty' 

ELSE 
'it is not empty' 

END 

這會給你一個列,其中值是「爲空」或「不爲空」,取決於在前面列的值。

您不能在DML語句中插入SQL --DML語句不是帶值的表達式。