TRIGGER trigger_reserva
BEFORE INSERT OR UPDATE ON MESA_RESERVADA
REFERENCING NEW AS NOVO OLD AS ANTIGO
FOR EACH ROW
DECLARE
reserva_invalida EXCEPTION;
livre NUMBER;
v_inicio TIMESTAMP;
v_fim TIMESTAMP;
BEGIN
SELECT inicio INTO v_inicio FROM RESERVA
WHERE (:NOVO.id_reserva = id);
SELECT fim INTO v_fim FROM RESERVA
WHERE (:NOVO.id_reserva = id);
livre := reserva_livre(v_inicio, v_fim, :NOVO.id_mesa);
IF (livre = 0) THEN
RAISE reserva_invalida;
END IF;
EXCEPTION
WHEN reserva_invalida THEN RAISE_APPLICATION_ERROR(-20123, 'A mesa ' || TO_CHAR(:NOVO.id_mesa) || ' já possui reserva para este horário!');
END trigger_reserva; |