FunctionsProceduresTriggers: 01_triggers.sql

File 01_triggers.sql, 830 bytes (added by 231184, 6 days ago)

01_triggers

Line 
1CREATE OR REPLACE FUNCTION trg_prevent_double_booking()
2 RETURNS TRIGGER
3 LANGUAGE plpgsql
4AS $$
5BEGIN
6 IF NEW.status <> 'cancelled' THEN
7 IF EXISTS (
8 SELECT 1
9 FROM appointment a
10 WHERE a.slot_id = NEW.slot_id
11 AND a.status <> 'cancelled'
12 AND (
13 TG_OP = 'INSERT'
14 OR a.appointment_id <> NEW.appointment_id
15 )
16 ) THEN
17 RAISE EXCEPTION 'Slot % is already booked', NEW.slot_id;
18 END IF;
19 END IF;
20
21 RETURN NEW;
22END;
23$$;
24
25DROP TRIGGER IF EXISTS prevent_double_booking ON appointment;
26
27CREATE TRIGGER prevent_double_booking
28 BEFORE INSERT OR UPDATE OF slot_id, status ON appointment
29 FOR EACH ROW
30EXECUTE FUNCTION trg_prevent_double_booking();