Trigger komplexer gestaltet

This commit is contained in:
Jan Fröse 2023-06-03 10:27:02 +02:00
parent c90543094d
commit fe96863703
2 changed files with 19 additions and 3 deletions

View file

@ -60,7 +60,7 @@ BEGIN
END rooms;
CREATE OR REPLACE TRIGGER booking_created
BEFORE INSERT OR UPDATE OR DELETE
AFTER INSERT OR UPDATE OR DELETE
ON BOOKINGROOM
FOR EACH ROW
DECLARE
@ -96,15 +96,28 @@ BEGIN
END;
CREATE OR REPLACE TRIGGER total_price
AFTER INSERT OR UPDATE ON BOOKING
BEFORE INSERT OR UPDATE OR DELETE ON BOOKING
FOR EACH ROW
DECLARE
total_price NUMBER;
nights NUMBER;
nights NUMBER;
BEGIN
IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('Buchung erfolgreich storniert');
ELSIF UPDATING AND :NEW.COST < :OLD.COST THEN
RAISE_APPLICATION_ERROR(-20111, 'Buchungen dürfen nicht vergünstigt werden!');
nights := :NEW.DEPARTUREDATE - :NEW.ARRIVALDATE;
IF nights < 1 THEN
RAISE_APPLICATION_ERROR(-20111, 'Invalide Dauer: Mindestens eine Nacht muss gebucht werden!');
END IF;
ELSE
nights := :NEW.DEPARTUREDATE - :NEW.ARRIVALDATE;
IF nights < 1 THEN
RAISE_APPLICATION_ERROR(-20111, 'Invalide Dauer: Mindestens eine Nacht muss gebucht werden!');
END IF;
total_price := nights * :NEW.COST;
dbms_output.put_line('Gesamtpreis:');
dbms_output.put_line(total_price);
END IF;
END;

View file

@ -47,4 +47,7 @@ ROLLBACK;
-- Gesamtpreise werden angezeigt
INSERT INTO BOOKING VALUES (234, TO_DATE('2023-09-03', 'YYYY-MM-DD'), TO_DATE('2023-09-05', 'YYYY-MM-DD'), 65, 'No Pension', 0, 15);
INSERT INTO BOOKING VALUES (456, TO_DATE('2023-09-06', 'YYYY-MM-DD'), TO_DATE('2023-10-01', 'YYYY-MM-DD'), 10, 'No Pension', 0, 15);
UPDATE BOOKING SET COST = 5 WHERE BOOKINGID = 456;
INSERT INTO BOOKING VALUES (789, TO_DATE('2023-09-06', 'YYYY-MM-DD'), TO_DATE('2023-09-06', 'YYYY-MM-DD'), 10, 'No Pension', 0, 15);
DELETE FROM BOOKING WHERE BOOKINGID = 234;
ROLLBACK;