Changes between Version 1 and Version 2 of UseCaseModel/evaluation


Ignore:
Timestamp:
04/29/25 13:27:25 (12 days ago)
Author:
175012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCaseModel/evaluation

    v1 v2  
    11=== Евалуација
    22
    3 Примери на индекси
     3**Примери на индекси**
    44
    55Индекс врз колона што често се филтрира: sdate:
     
    2323
    2424}}}
     25
     26** Примери за тригери **
     27
     281. Проверка на датумска логика
     29{{{#!sql
     30
     31CREATE OR REPLACE FUNCTION project.validate_policy_dates()
     32RETURNS TRIGGER AS $$
     33BEGIN
     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;
     38END;
     39$$ LANGUAGE plpgsql;
     40
     41CREATE TRIGGER trigger_validate_policy_dates
     42BEFORE INSERT OR UPDATE ON project.policy
     43FOR EACH ROW EXECUTE FUNCTION project.validate_policy_dates();
     44
     45}}}
     46
     47
     482. Да спречи внесување на плаќање (Payment) кое е поголемо од осигурената вредност
     49{{{#!sql
     50
     51CREATE OR REPLACE FUNCTION project.validate_payment_amount()
     52RETURNS TRIGGER AS $$
     53DECLARE
     54    max_amount NUMERIC;
     55BEGIN
     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;
     73END;
     74$$ LANGUAGE plpgsql;
     75
     76CREATE TRIGGER trigger_validate_payment_amount
     77BEFORE INSERT OR UPDATE ON project.payment
     78FOR EACH ROW
     79EXECUTE FUNCTION project.validate_payment_amount();
     80
     81}}}