Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ayuda con un Trigger!

Estas en el tema de Ayuda con un Trigger! en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/08/2008, 12:08
 
Fecha de Ingreso: abril-2007
Mensajes: 19
Antigüedad: 17 años, 7 meses
Puntos: 0
Ayuda con un Trigger!

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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.