Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------1
- CREATE OR REPLACE TRIGGER tr_b_i_calculo_multa
- before
- INSERT OR UPDATE ON FACTURA
- FOR EACH ROW
- DECLARE
- dias NUMBER :=0;
- fecha_inicial DATE;
- valor_inicial NUMBER :=0;
- mensaje VARCHAR2(200) :='';
- BEGIN
- SELECT fecha_entrega_embarcacion,valor_inicial_alquiler INTO fecha_inicial,valor_inicial FROM alquiler WHERE id_alquiler = :NEW.id_alquiler;
- dias := :NEW.fecha_factura - fecha_inicial;
- :NEW.pago_inicial := valor_inicial;
- :NEW.iva := valor_inicial*(12/100);
- :NEW.multa := 0;
- DBMS_OUTPUT.put_line(dias);
- IF dias>=1 THEN
- :NEW.multa := valor_inicial*(15/100);
- mensaje := 'Excedió el limite de horas de alquiler '||:NEW.multa;
- END IF;
- :NEW.pago_total := :NEW.iva+:NEW.multa+:NEW.pago_inicial;
- UPDATE alquiler SET observacion_alquiler = mensaje,valor_final_alquiler = :NEW.pago_total
- WHERE id_alquiler = :NEW.id_alquiler;
- END;
- --------------2
- CREATE OR REPLACE TRIGGER tr_b_i_calculo_reicidencia
- after
- INSERT OR UPDATE ON ALQUILER
- FOR EACH ROW
- DECLARE
- reincidencia INTEGER :=0;
- BEGIN
- SELECT reincidencia_alquiler INTO reincidencia FROM cliente WHERE id_cliente = :NEW.id_cliente;
- IF reincidencia IS NULL THEN reincidencia := 0; END IF;
- reincidencia := reincidencia +1;
- UPDATE cliente SET REINCIDENCIA_ALQUILER = reincidencia WHERE id_cliente = :NEW.id_cliente;
- END;
- ----------3
- CREATE OR REPLACE TRIGGER tr_b_i_descuento
- before
- INSERT OR UPDATE ON ALQUILER
- FOR EACH ROW
- DECLARE
- reincidencia INTEGER :=0;
- BEGIN
- SELECT reincidencia_alquiler INTO reincidencia FROM cliente WHERE id_cliente = :NEW.id_cliente;
- IF reincidencia >=7 THEN
- :NEW.valor_inicial_alquiler := :NEW.valor_inicial_alquiler - (:NEW.valor_inicial_alquiler * (40/100));
- UPDATE cliente SET reincidencia_alquiler = 0 WHERE id_cliente = :NEW.id_cliente;
- END IF;
- END;
- ------------4
- CREATE OR REPLACE TRIGGER tr_b_i_eliminar_tripulacion
- before
- INSERT OR UPDATE ON FACTURA
- FOR EACH ROW
- DECLARE
- embarcacion_id INTEGER :=0;
- tripulacion_id INTEGER :=0;
- BEGIN
- SELECT id_embarcacion INTO embarcacion_id FROM alquiler WHERE id_alquiler = :NEW.id_alquiler;
- SELECT id_tripulacion INTO tripulacion_id FROM embarcacion WHERE id_embarcacion = embarcacion_id;
- DELETE FROM pasajeros WHERE id_tripulacion = tripulacion_id;
- DELETE FROM tripulacion WHERE id_embarcacion = embarcacion_id;
- END;
- ---------------5
- CREATE OR REPLACE TRIGGER tr_b_i_pues_dispo_tripulacion
- before
- INSERT OR UPDATE ON TRIPULACION
- FOR EACH ROW
- DECLARE
- maximo INTEGER :=0;
- ocupados INTEGER :=0;
- BEGIN
- SELECT max_pasajeros INTO maximo FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
- ocupados := :old.puestos_ocupados;
- IF :old.puestos_ocupados IS NULL THEN ocupados := 0; END IF;
- :NEW.puestos_disponible := maximo - ocupados;
- END;
- ------------------6
- CREATE OR REPLACE TRIGGER tr_b_i_mantenimiento_alert
- before
- INSERT OR UPDATE ON mantenimiento
- FOR EACH ROW
- DECLARE
- estado VARCHAR2(50);
- BEGIN
- SELECT estado INTO estado FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
- IF NOT estado = 'BUENO' THEN
- RAISE_APPLICATION_ERROR(-20000, 'Esta embarcacion no está en buen estado por lo que necesita una reparación antes de darle mantenimiento');
- END IF;
- END;
- -------------7
- CREATE OR REPLACE TRIGGER tr_b_i_reparacion_alert
- before
- INSERT OR UPDATE ON reparacion
- FOR EACH ROW
- DECLARE
- estado VARCHAR2(50);
- BEGIN
- SELECT estado INTO estado FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
- IF estado = 'BUENO' THEN
- RAISE_APPLICATION_ERROR(-20000, 'Esta embarcacion no necesita reparaciones');
- END IF;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement