wiki:Triggers

Version 3 (modified by 221071, 17 hours ago) ( diff )

--

Тригери

1. Тригер за спречување на преклопени договори по оглас

  • Тригер за забрана на преклопени изнајмувања (Lease) за ист оглас (Listing) ]. Целта е да се спречи креирање на изнајмувања со ранг на датуми кои се преклопуваат за ист Listing. Доколку новото (или изменетото) изнајмување се поклопува со постоечко, операцијата ќе биде одбиена со RAISE EXCEPTION.
    CREATE OR REPLACE FUNCTION domify.f_lease_no_overlap()
    RETURNS TRIGGER AS $$
    DECLARE
      cnt INT;
    BEGIN
      SELECT COUNT(*) INTO cnt
      FROM domify."lease"
      WHERE listing_id = NEW.listing_id
        AND id <> COALESCE(NEW.id, -1)
        AND daterange(start_date, end_date, '[]')
            && daterange(NEW.start_date, NEW.end_date, '[]');
      IF cnt > 0 THEN
         RAISE EXCEPTION
           'Listing % веќе има договор кој се преклопува со периодот %–%',
           NEW.listing_id, NEW.start_date, NEW.end_date;
      END IF;
      RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER t_lease_no_overlap
    BEFORE INSERT OR UPDATE ON domify."lease"
    FOR EACH ROW
    EXECUTE FUNCTION domify.f_lease_no_overlap();
    
    
Note: See TracWiki for help on using the wiki.