15 | | == |
| 15 | = Тригер за автоматско пресметување на {{{total_price}}} при внес во {{{contains}}} или при update |
| 16 | Овој тригер автоматски ја ажурира {{{total_price}}} во {{{orders}}} секој пат кога ќе се додаде, \\ |
| 17 | смени или избрише некој елемент во {{{contains}}}. \\ |
| 18 | Целта е да се осигураме дека {{{orders.total_price}}} е точен збир од сите {{{quantity}}} * {{{price}}} вредности \\ |
| 19 | во {{{contains}}} за таа нарачка. \\ |
| 20 | Првин се креира функција : |
| 21 | {{{#!sql |
| 22 | CREATE OR REPLACE FUNCTION update_order_total_price() |
| 23 | RETURNS TRIGGER AS $$ |
| 24 | DECLARE |
| 25 | order_id INTEGER; |
| 26 | BEGIN |
| 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; |
| 42 | END; |
| 43 | $$ LANGUAGE plpgsql; |
| 44 | \\ |
| 45 | Потоа се креира тригерот што ја повикува таа функција: |
| 46 | {{{#!sql |
| 47 | CREATE TRIGGER trg_update_total_price |
| 48 | AFTER INSERT OR UPDATE OR DELETE ON contains |
| 49 | FOR EACH ROW |
| 50 | EXECUTE FUNCTION update_order_total_price(); |
| 51 | }}} |
| 52 | \\ |