Changes between Version 1 and Version 2 of DatabaseProgramming


Ignore:
Timestamp:
06/14/26 15:40:58 (3 days ago)
Author:
231072
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v1 v2  
    11== Опис
    22
     3<syntaxhighlight lang="sql">
     4CREATE OR REPLACE FUNCTION trg_prevent_double_booking()
     5RETURNS TRIGGER
     6AS $$
     7BEGIN
     8    IF NEW.booking_status IN ('PENDING','CONFIRMED') THEN
     9        IF EXISTS (
     10            SELECT 1
     11            FROM bookings b
     12            WHERE b.room_id = NEW.room_id
     13              AND b.booking_status IN ('PENDING','CONFIRMED')
     14              AND daterange(b.check_in_date, b.check_out_date, '[)')
     15                  && daterange(NEW.check_in_date, NEW.check_out_date, '[)')
     16        ) THEN
     17            RAISE EXCEPTION 'Room % is already booked', NEW.room_id;
     18        END IF;
     19    END IF;
     20
     21    RETURN NEW;
     22END;
     23$$ LANGUAGE plpgsql;
     24
     25CREATE OR REPLACE TRIGGER prevent_double_booking
     26BEFORE INSERT ON bookings
     27FOR EACH ROW
     28EXECUTE FUNCTION trg_prevent_double_booking();
     29</syntaxhighlight>