| 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 | \\ |