Es posible que desee una acción de disparo para ejecute una vez que el cliente ejecute una instrucción que modifique un millón de filas (activador de nivel de estado de cuenta). O bien, es posible que desee activar la acción una vez por cada fila que se modifique (activador a nivel de fila).
EJEMPLO: Digamos que tienes un gatillo que asegurará que todos los estudiantes de último año de secundaria se gradúen. Es decir, cuando la calificación de un senior es 12 y la aumentamos a 13, queremos establecer la calificación en NULL
.
Para un desencadenante de nivel de extracto, diría, después de ejecutar el enunciado de grado de aumento, la tabla completa una vez para actualizar cualquier ahoras con grado 13 a NULL
.
Para un trigger a nivel de fila, se diría, después de cada fila que se ha actualizado, actualizar la calificación de la nueva fila a NULL
si es 13.
Un trigger a nivel de declaración se vería así:
create trigger stmt_level_trigger
after update on Highschooler
begin
update Highschooler
set grade = NULL
where grade = 13;
end;
y un disparador a nivel de fila se vería así:
create trigger row_level_trigger
after update on Highschooler
for each row
when New.grade = 13
begin
update Highschooler
set grade = NULL
where New.ID = Highschooler.ID;
end;
Tenga en cuenta que SQLite no es compatible con disparadores de nivel de declaración, por lo que en SQLite, el FOR EACH ROW
es opcional.
Entonces, ¿un disparador de nivel de extracto podría modificar una fila, mientras que un nivel de fila podría modificar cada fila en la tabla? –
No, un desencadenador de nivel de fila se puede usar para actualizar/eliminar/insertar muchas filas también. O filas en otras tablas. –
Y un desencadenante de nivel de extracto también. –