Advertisement
JUNIORCEDE1

Untitled

Jul 7th, 2017
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -------------1
  2. CREATE OR REPLACE TRIGGER tr_b_i_calculo_multa
  3. before
  4. INSERT OR UPDATE ON FACTURA
  5. FOR EACH ROW
  6. DECLARE
  7. dias NUMBER :=0;
  8. fecha_inicial DATE;
  9. valor_inicial NUMBER :=0;
  10. mensaje VARCHAR2(200) :='';
  11. BEGIN
  12.     SELECT fecha_entrega_embarcacion,valor_inicial_alquiler INTO fecha_inicial,valor_inicial FROM alquiler WHERE id_alquiler = :NEW.id_alquiler;
  13.     dias := :NEW.fecha_factura - fecha_inicial;
  14.     :NEW.pago_inicial := valor_inicial;
  15.     :NEW.iva := valor_inicial*(12/100);
  16.     :NEW.multa := 0;
  17.     DBMS_OUTPUT.put_line(dias);
  18.     IF dias>=1 THEN
  19.         :NEW.multa := valor_inicial*(15/100);
  20.         mensaje := 'Excedió el limite de horas de alquiler '||:NEW.multa;
  21.     END IF;
  22.     :NEW.pago_total := :NEW.iva+:NEW.multa+:NEW.pago_inicial;
  23.     UPDATE alquiler SET observacion_alquiler = mensaje,valor_final_alquiler = :NEW.pago_total
  24.     WHERE id_alquiler = :NEW.id_alquiler;
  25. END;
  26.  
  27. --------------2
  28. CREATE OR REPLACE TRIGGER tr_b_i_calculo_reicidencia
  29. after
  30. INSERT OR UPDATE ON ALQUILER
  31. FOR EACH ROW
  32. DECLARE
  33. reincidencia INTEGER :=0;
  34. BEGIN
  35.     SELECT reincidencia_alquiler INTO reincidencia FROM cliente WHERE id_cliente = :NEW.id_cliente;
  36.     IF reincidencia IS NULL THEN reincidencia := 0; END IF;
  37.     reincidencia := reincidencia +1;
  38.     UPDATE cliente SET REINCIDENCIA_ALQUILER = reincidencia WHERE id_cliente = :NEW.id_cliente;
  39. END;
  40.  
  41. ----------3
  42. CREATE OR REPLACE TRIGGER tr_b_i_descuento
  43. before
  44. INSERT OR UPDATE ON ALQUILER
  45. FOR EACH ROW
  46. DECLARE
  47. reincidencia INTEGER :=0;
  48. BEGIN
  49.     SELECT reincidencia_alquiler INTO reincidencia FROM cliente WHERE id_cliente = :NEW.id_cliente;
  50.     IF reincidencia >=7 THEN
  51.         :NEW.valor_inicial_alquiler := :NEW.valor_inicial_alquiler - (:NEW.valor_inicial_alquiler * (40/100));
  52.         UPDATE cliente SET reincidencia_alquiler = 0 WHERE id_cliente = :NEW.id_cliente;
  53.     END IF;
  54. END;
  55.  
  56. ------------4
  57. CREATE OR REPLACE TRIGGER tr_b_i_eliminar_tripulacion
  58. before
  59. INSERT OR UPDATE ON FACTURA
  60. FOR EACH ROW
  61. DECLARE
  62. embarcacion_id INTEGER :=0;
  63. tripulacion_id INTEGER :=0;
  64. BEGIN
  65.     SELECT id_embarcacion INTO embarcacion_id FROM alquiler WHERE id_alquiler = :NEW.id_alquiler;
  66.     SELECT id_tripulacion INTO tripulacion_id FROM embarcacion WHERE id_embarcacion = embarcacion_id;
  67.     DELETE FROM pasajeros WHERE id_tripulacion = tripulacion_id;
  68.     DELETE FROM tripulacion WHERE id_embarcacion = embarcacion_id;
  69. END;
  70.  
  71. ---------------5
  72. CREATE OR REPLACE TRIGGER tr_b_i_pues_dispo_tripulacion
  73. before
  74. INSERT OR UPDATE ON TRIPULACION
  75. FOR EACH ROW
  76. DECLARE
  77. maximo INTEGER :=0;
  78. ocupados INTEGER :=0;
  79. BEGIN
  80.     SELECT max_pasajeros INTO maximo FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
  81.     ocupados := :old.puestos_ocupados;
  82.     IF :old.puestos_ocupados IS NULL THEN ocupados := 0; END IF;
  83.     :NEW.puestos_disponible := maximo - ocupados;
  84. END;
  85.  
  86. ------------------6
  87. CREATE OR REPLACE TRIGGER tr_b_i_mantenimiento_alert
  88. before
  89. INSERT OR UPDATE ON mantenimiento
  90. FOR EACH ROW
  91. DECLARE
  92. estado VARCHAR2(50);
  93. BEGIN
  94.     SELECT estado INTO estado FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
  95.     IF NOT estado = 'BUENO' THEN
  96.         RAISE_APPLICATION_ERROR(-20000, 'Esta embarcacion no está en buen estado por lo que necesita una reparación antes de darle mantenimiento');
  97.     END IF;
  98. END;
  99.  
  100.  
  101. -------------7
  102. CREATE OR REPLACE TRIGGER tr_b_i_reparacion_alert
  103. before
  104. INSERT OR UPDATE ON reparacion
  105. FOR EACH ROW
  106. DECLARE
  107. estado VARCHAR2(50);
  108. BEGIN
  109.     SELECT estado INTO estado FROM embarcacion WHERE id_embarcacion = :NEW.id_embarcacion;
  110.     IF estado = 'BUENO' THEN
  111.         RAISE_APPLICATION_ERROR(-20000, 'Esta embarcacion no necesita reparaciones');
  112.     END IF;
  113. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement