| 357 | ===== Order-Article |
| 358 | |
| 359 | * Креирање на нова табела за `order items` |
| 360 | |
| 361 | {{{#!sql |
| 362 | CREATE TABLE order_item ( |
| 363 | item_id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, |
| 364 | ord_id BIGINT NOT NULL, |
| 365 | art_id BIGINT NOT NULL, |
| 366 | quantity INT NOT NULL, |
| 367 | unit_price DECIMAL(10,2) NOT NULL, |
| 368 | total_price DECIMAL(10,2) GENERATED ALWAYS AS (quantity * unit_price) STORED, |
| 369 | FOREIGN KEY (ord_id) REFERENCES orders (ord_id), |
| 370 | FOREIGN KEY (art_id) REFERENCES article (art_id), |
| 371 | UNIQUE (ord_id, art_id) |
| 372 | ); |
| 373 | }}} |
| 374 | |
| 375 | * Креирање тригер и функција за да се прави пресметката на сума |
| 376 | |
| 377 | {{{#!sql |
| 378 | CREATE OR REPLACE FUNCTION update_order_sum() |
| 379 | RETURNS TRIGGER AS $$ |
| 380 | BEGIN |
| 381 | UPDATE orders |
| 382 | SET ord_sum = (SELECT COALESCE(SUM(total_price), 0) |
| 383 | FROM order_item WHERE ord_id = NEW.ord_id) |
| 384 | WHERE ord_id = NEW.ord_id; |
| 385 | RETURN NEW; |
| 386 | END; |
| 387 | $$ LANGUAGE plpgsql; |
| 388 | |
| 389 | CREATE TRIGGER order_item_after_change |
| 390 | AFTER INSERT OR UPDATE OR DELETE ON order_item |
| 391 | FOR EACH ROW EXECUTE FUNCTION update_order_sum(); |
| 392 | }}} |
| 393 | |
| 394 | |
| 395 | |