Changes between Version 8 and Version 9 of Тригери


Ignore:
Timestamp:
06/25/25 03:33:51 (18 hours ago)
Author:
183175
Comment:

--

Legend:

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

    v8 v9  
    1 = Тригери
     1== Тригери
    22Тригери се објекти како придружни табели, кои автоматски се активираат кога ке се случи нешто во врска со таа табела за која се врзани тригерите.
    33Креирање на тригери се дефинира со '''{{{CREATE TRIGGER}}}'''.\\
     
    1313по редови '''{{{FOR EACH ROW}}}''' и по операции '''{{{FOR EACH STATEMENT}}}'''.\\
    1414\\
    15 ==
     15= Тригер за автоматско пресметување на {{{total_price}}} при внес во {{{contains}}} или при update
     16Овој тригер автоматски ја ажурира {{{total_price}}} во {{{orders}}} секој пат кога ќе се додаде, \\
     17смени или избрише некој елемент во {{{contains}}}. \\
     18Целта е да се осигураме дека {{{orders.total_price}}} е точен збир од сите {{{quantity}}} * {{{price}}} вредности \\
     19во {{{contains}}} за таа нарачка. \\
     20Првин се креира функција :
     21{{{#!sql
     22CREATE OR REPLACE FUNCTION update_order_total_price()
     23RETURNS TRIGGER AS $$
     24DECLARE
     25  order_id INTEGER;
     26BEGIN
     27  IF TG_OP = 'DELETE' THEN
     28    order_id := OLD.id_order;
     29  ELSE
     30    order_id := NEW.id_order;
     31  END IF;
     32
     33  UPDATE orders
     34  SET total_price = (
     35    SELECT COALESCE(SUM(quantity * price), 0)
     36    FROM contains
     37    WHERE id_order = order_id
     38  )
     39  WHERE id_order = order_id;
     40
     41  RETURN NULL;
     42END;
     43$$ LANGUAGE plpgsql;
     44\\
     45Потоа се креира тригерот што ја повикува таа функција:
     46{{{#!sql
     47CREATE TRIGGER trg_update_total_price
     48AFTER INSERT OR UPDATE OR DELETE ON contains
     49FOR EACH ROW
     50EXECUTE FUNCTION update_order_total_price();
     51}}}
     52\\