当前位置:  开发笔记 > 数据库 > 正文

在SQLite中创建条件SQL触发器

如何解决《在SQLite中创建条件SQL触发器》经验,为你挑选了1个好方法。

我正在尝试为sqlite编写一个触发器,并且遇到各种各样的问题.事实上,我认为我的真正问题在于我在sql语言中的糟糕背景.无论如何这里...

我有两个表Table1和Table2.Table1有一个名为time的列(64位整数时间).我需要一个触发器来监视Table1中插入的​​新行.如果Table1中有3行或更多行的时间大于X(以下示例中的硬编码值为120秒),我需要在Table2中插入一个新行.

这是我到目前为止(注意这不起作用)

CREATE TRIGGER testtrigger AFTER  
INSERT ON Table1 WHEN 
( 
   SELECT COUNT() AS tCount FROM
   ( 
     SELECT * FROM Table1 WHERE  
       time > (NEW.time - 120)  
   ) WHERE tCount > 3
) 
BEGIN 
   INSERT INTO Table2 (time, data) VALUES 
   (NEW.time, 'data1');  
END

那些在SQL上比我更好的灵魂?



1> dlamblin..:

这有效,因为该WHEN子句需要一个表达式:

sqlite> .schema Table1
CREATE TABLE Table1 (time int);
CREATE TRIGGER testtrigger AFTER INSERT ON Table1
WHEN 3<(SELECT Count() FROM Table1 WHERE time>(NEW.time-120))
BEGIN
INSERT INTO Table2 (time, data) VALUES (NEW.time,'data1');
END;

你看过这个参考页面了吗?据我所知,这是"滥用汇总",可能源于该When部分的陈述.你有这个:

sqlite> .tables
Table1  Table2
sqlite> .schema Table1
CREATE TABLE Table1 (time int);
CREATE TRIGGER testtrigger AFTER
INSERT ON Table1 WHEN 
( 
   SELECT COUNT() AS tCount FROM
   ( 
     SELECT * FROM Table1 WHERE  
       time > (NEW.time - 120)  
   ) WHERE tCount > 3
) 
BEGIN 
   INSERT INTO Table2 (time, data) VALUES 
   (NEW.time, 'data1');  
END;
sqlite> .schema Table2
CREATE TABLE Table2 (time int,data string);
sqlite> insert into Table1 VALUES (5);
SQL error: misuse of aggregate: 
sqlite> 

我尝试删除" WHERE tCount"使其成为一个表达式,但后来我在运算符处出现语法错误.

所以我改变了上面的解决方案.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有