| | 25 | |
| | 26 | ** Примери за тригери ** |
| | 27 | |
| | 28 | 1. Проверка на датумска логика |
| | 29 | {{{#!sql |
| | 30 | |
| | 31 | CREATE OR REPLACE FUNCTION project.validate_policy_dates() |
| | 32 | RETURNS TRIGGER AS $$ |
| | 33 | BEGIN |
| | 34 | IF NEW.edate <= NEW.sdate THEN |
| | 35 | RAISE EXCEPTION 'End date must be after start date. Start: %, End: %', NEW.sdate, NEW.edate; |
| | 36 | END IF; |
| | 37 | RETURN NEW; |
| | 38 | END; |
| | 39 | $$ LANGUAGE plpgsql; |
| | 40 | |
| | 41 | CREATE TRIGGER trigger_validate_policy_dates |
| | 42 | BEFORE INSERT OR UPDATE ON project.policy |
| | 43 | FOR EACH ROW EXECUTE FUNCTION project.validate_policy_dates(); |
| | 44 | |
| | 45 | }}} |
| | 46 | |
| | 47 | |
| | 48 | 2. Да спречи внесување на плаќање (Payment) кое е поголемо од осигурената вредност |
| | 49 | {{{#!sql |
| | 50 | |
| | 51 | CREATE OR REPLACE FUNCTION project.validate_payment_amount() |
| | 52 | RETURNS TRIGGER AS $$ |
| | 53 | DECLARE |
| | 54 | max_amount NUMERIC; |
| | 55 | BEGIN |
| | 56 | -- земи ја максималната дозволена вредност од пакетот |
| | 57 | SELECT pkg.total INTO max_amount |
| | 58 | FROM project.policy pol |
| | 59 | JOIN project.package pkg ON pol.package = pkg.code |
| | 60 | WHERE pol.p_id = NEW.policy; |
| | 61 | |
| | 62 | -- ако не постои поврзана полиса или пакет, кревај грешка |
| | 63 | IF max_amount IS NULL THEN |
| | 64 | RAISE EXCEPTION 'Cannot validate payment. No associated policy/package found for policy ID: %', NEW.policy; |
| | 65 | END IF; |
| | 66 | |
| | 67 | -- ако износот на плаќање е поголем од дозволениот, кревај грешка |
| | 68 | IF NEW.p_amount > max_amount THEN |
| | 69 | RAISE EXCEPTION 'Payment amount (%.2f) exceeds maximum allowed (%.2f) for policy %', NEW.p_amount, max_amount, NEW.policy; |
| | 70 | END IF; |
| | 71 | |
| | 72 | RETURN NEW; |
| | 73 | END; |
| | 74 | $$ LANGUAGE plpgsql; |
| | 75 | |
| | 76 | CREATE TRIGGER trigger_validate_payment_amount |
| | 77 | BEFORE INSERT OR UPDATE ON project.payment |
| | 78 | FOR EACH ROW |
| | 79 | EXECUTE FUNCTION project.validate_payment_amount(); |
| | 80 | |
| | 81 | }}} |