2011-01-05 24 views
12

Có điều kiện nếu/trường hợp/khi câu lệnh được hỗ trợ trong trình kích hoạt sqlite không?câu lệnh chèn có điều kiện trong các kích hoạt sqlite

ta hãy nói rằng tôi có các thiết lập sau:

CREATE TABLE someTable (id INTEGER PRIMARY KEY, someValue INTEGER); 
CREATE TRIGGER update_another_table AFTER INSERT ON someTable 
BEGIN 
    IF(new.someValue==0) 
     DELETE FROM another_table WHERE (...some condition); 
    ELSE 
     IF NOT EXISTS(SELECT anotherValue FROM another_table WHERE anotherValue =new.someValue) 
      INSERT INTO another_table VALUES(new.someValue, ...); 
     ELSE 
      UPDATE another_table SET anotherValue = new.someValue; 
END; 

Nhưng nó tăng một lỗi cú pháp Sqlite error near 'IF': syntax error"

Trả lời

31

Đó là một lỗi cú pháp như Diagram Cú pháp cho SQLite Triggers không cho phép bất kỳ NẾU khoản cũng không CASE WHEN công trình xây dựng.

Nhưng bạn có thể đạt được hiệu quả tương tự bằng cách định nghĩa hai hoặc ba kích hoạt sử dụng các điều kiện KHI, xem http://sqlite.org/lang_createtrigger.html

Vì vậy, bạn sẽ tạo ra trên kích hoạt đối với trường hợp DELETE của bạn như thế này:

CREATE TRIGGER delete_from_other_table AFTER INSERT ON someTable 
WHEN new.someValue = 0 
BEGIN 
    DELETE FROM anotherTable WHERE (... some condition); 
END; 

Và hơn thêm trình kích hoạt khác cho INSERT và UPDATE Case với các điều kiện thích hợp ...

CREATE TRIGGER update_another_table AFTER INSERT ON someTable 
WHEN new.someValue <> 0 
BEGIN 
    ... 
END; 
Các vấn đề liên quan