sas*_*alm 3 sql sqlite triggers
我试图找出如何在SQLite触发器中的条件内放置一个删除语句.
我想出了这个示例代码:
CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
BEGIN
SELECT CASE WHEN
1 == 1
THEN
DELETE FROM mytable
END;
END;
Run Code Online (Sandbox Code Playgroud)
但它无法编译:
Error: near "DELETE": syntax error
Run Code Online (Sandbox Code Playgroud)
如果我更换DELETE FROM mytable
用RAISE(FAIL, "mytrigger was activated")
,它编译罚款.
AFAIK SQLite不支持条件执行.该CASE
表达式是条件评估的表达式(不声明!)(不执行!).这意味着您可以使用它来选择要返回的值 - 但不能选择要执行的语句.
坏消息是SQLite无法决定是否执行该DELETE
语句.好消息是你并不关心DELETE
语句是否被执行 - 你只关心行是否被删除.所以 - 总是执行DELETE
语句,但只有在条件返回true时才删除行:
CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
BEGIN
DELETE FROM mytable
WHERE 1 == 1
END;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1957 次 |
最近记录: |