Hola,
Estoy realizando un proyecto en el que poseo una base de datos mysql. Necesito hacer un trigger pero no consigo implementarlo bien, siempre me da error de sintaxis.
Voy a intentar explicar lo mas rapido posible en que consiste: Se trata de un sistema que permite reservar asientos de tren.
Tengo en mi base de datos tres tablas, tengo mas, pero para el trigger en cuestion solo utilizo esas tres:
trayectos(ntrayecto, origen, destino, horaSalida, horaLlegada, id_ruta) (id_ruta es una clave foranea al identificardor de otra tabla que se llama ruta)
asientos(nvagon, nasiento, clase, libre, trayecto_id, precio) (trayecto_id es una clave foranea a ntrayecto de trayectos)
reserva(nreserva,nombre, apellidos, nvagon, nasiento, trayecto_id, email, tarifa,codCliente)
La idea es que cuando se inserte una nueva reserva se modifique el asiento correspondiente y se ponga el parametro libre a 0, indicando de este modo q esta ocupado.
El problema viene en que una ruta puede incluir mas de un trayecto. Cada asiento pertenece a un trayecto, entonces cuando se reserva el asiento de un trayecto concreto se deben poner a 0 tambien el parametro libre de los trayectos, que por decir de alguna manera, estén incluidos en el trayecto reservado en ese momento.
Por ejemplo:
Tenemos la ruta: madrid- segovia-valladolid-leon
en esta ruta tenemos los siguientes trayectos:
madrid-segovia,
madrid-valladolid,
madrid-leon,
segovia-valladolid,
segovia-leon y
valladolid-leon
Entonces si un usuario reserva el trayecto madrid valladolid y se le asigna como asiento el que tiene nvagon=1 y nasiento=5, pues tienen q ponerse a ocupado los asientos que tienen nvagon=1, nasiento=5 y que pertenecen a los trayectos
incluidos en el trayecto madrid-valladolid. En ese caso serian todos menos valladolid-leon. Para sacar estos trayecto "incluidos" uso los horarios de salida y de llegada, eligiendo por tanto aquellos trayectos que tiene como hora de salida la misma o mayor que el trayecto en cuestion e igual para la hora de llegada solo qeu siendo menor o igual.
El trigger que he hecho es el siguiente, pero me da error de sintaxis y no entiendo porque:
create trigger Asientos
before insert on reserva
for each row
begin
declare ruta int;
declare hS time;
declare hL time;
select id_ruta into ruta, horaSalida into hS, horaLlegada into hL
from trayecto
where ntrayecto=NEW.trayecto_id;
for cursor in (select ntrayecto from trayecto where horaSalida>=hS AND horaLlegada<=hL AND id_ruta=ruta)
loop
update asientos
set libre=0
where nvagon=NEW.nvagon AND nasiento=NEW.nasiento AND trayecto_id=cursor.trayecto_id;
end loop;
end
Muchas gracias de antemano por la ayuda!!
un saludo.