Changes between Version 12 and Version 13 of Тригери


Ignore:
Timestamp:
06/25/25 03:44:03 (8 weeks ago)
Author:
183175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Тригери

    v12 v13  
    7777}}}
    7878\\
     79= Тригер за враќање на залиха ако се избрише елемент од {{{contains}}}
     80Овој тригер служи за враќање на количина во {{{stock}}} ако се избрише елемент од нарачка (откажана, вратена итн.)\\
     81односно, ако се избрише ред од {{{contains}}},пример за тоа е вратен производ, количината да се врати назад. \\
     82Првин се креира функција :
     83{{{#!sql
     84CREATE OR REPLACE FUNCTION increment_stock_on_delete()
     85RETURNS TRIGGER AS $$
     86BEGIN
     87  UPDATE stock
     88  SET quantity = quantity + OLD.quantity,
     89      updated_at = NOW()
     90  WHERE id_stock = OLD.id_stock;
     91
     92  RETURN OLD;
     93END;
     94$$ LANGUAGE plpgsql;
     95}}}
     96\\
     97Потоа се креира тригерот што ја повикува таа функција:
     98{{{#!sql
     99CREATE TRIGGER trg_increment_stock
     100AFTER DELETE ON contains
     101FOR EACH ROW
     102EXECUTE FUNCTION increment_stock_on_delete();
     103}}}
     104\\
     105= Тригер за враќање на залиха ако нарачка не се испорача
     106Првин се креира функција :
     107{{{#!sql
     108CREATE OR REPLACE FUNCTION restock_if_cancelled()
     109RETURNS TRIGGER AS $$
     110DECLARE
     111  row RECORD;
     112BEGIN
     113  IF TG_OP = 'UPDATE' AND OLD.order_status <> 'cancelled' AND NEW.order_status = 'cancelled' THEN
     114    FOR row IN
     115      SELECT c.id_stock, c.quantity
     116      FROM contains c
     117      WHERE c.id_order = NEW.id_order
     118    LOOP
     119      UPDATE stock
     120      SET quantity = quantity + row.quantity,
     121          updated_at = NOW()
     122      WHERE id_stock = row.id_stock;
     123    END LOOP;
     124  END IF;
     125
     126  RETURN NEW;
     127END;
     128$$ LANGUAGE plpgsql;
     129}}}
     130\\
     131Потоа се креира тригерот што ја повикува таа функција:
     132{{{#!sql
     133CREATE TRIGGER trg_restock_on_cancel
     134AFTER UPDATE ON orders
     135FOR EACH ROW
     136EXECUTE FUNCTION restock_if_cancelled();
     137}}}
     138\\