Estoy tratando de escribir un desencadenador para sqlite y simplemente me encuentro con todo tipo de problemas. En verdad, creo que mi verdadero problema es mi pobre historial en el lenguaje sql. De todos modos aquí va ...Crear un desencadenador de SQL condicional en SQLite
Tengo dos tablas Table1 y Table2. Table1 tiene una columna llamada time (que es un tiempo entero de 64 bits). Necesito un disparador que mira para insertar una nueva fila en Table1. Si hay 3 o más filas en la Tabla 1 que tienen un tiempo mayor que X (un valor codificado en el siguiente ejemplo 120 segundos), necesito insertar una nueva fila en la Tabla 2.
Esto es lo que tengo hasta ahora (Nota esto no funciona)
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
cualquier tipo almas por ahí que son mejores en SQL que yo?
El enlace no funciona y sí, se me ha prestado mucha atención a la referencia de lenguaje sql en el sitio web de sqlite. Simplemente no estoy recibiendo "eso". –
Sí, StackOverflow tiene un problema con mi enlace, debería ser: http://sqlite.org/lang_createtrigger.html; cambie el% 5f a a '_' – dlamblin
@Typhoid - Creo que la cláusula WHEN activada espera una expresión de comparación que devuelve verdadero o falso, en lugar de devolver un número. Entonces, el segundo formato debería funcionar. No está claro en el diagrama de sintaxis de SQLite para expr que necesite tener algo que devuelva verdadero/falso en este caso, por lo que tiene sentido que le resulte confuso. SQLite está bien documentado, pero todavía tiene lagunas. Enviaría un correo electrónico al equipo de SQLite y mencionaría esto. –