| Version 1 (modified by , 4 days ago) ( diff ) |
|---|
Напреден развој на база
1.Тригери и Функции
1.1 Автоматско пресметување на вкупниот износ на продажба (trg_recalculate_sale_total)
Цел: Автоматски ја ажурира вкупната сума на продажбата секогаш кога се додаваат, менуваат или бришат ставки, со што се обезбедува точна пресметка во базата на податоци.
CREATE OR REPLACE FUNCTION trg_fn_recalculate_sale_total()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
DECLARE
v_sale_id INT;
BEGIN
IF TG_OP = 'DELETE' THEN
v_sale_id := OLD.sale_id;
ELSE
v_sale_id := NEW.sale_id;
END IF;
UPDATE sale
SET total_amount = (
SELECT COALESCE(SUM(quantity * unit_price_at_sale), 0)
FROM sale_item
WHERE sale_id = v_sale_id
)
WHERE sale_id = v_sale_id;
RETURN NULL;
END;
$$;
CREATE TRIGGER trg_recalculate_sale_total
AFTER INSERT OR UPDATE OR DELETE ON sale_item
FOR EACH ROW
EXECUTE FUNCTION trg_fn_recalculate_sale_total();
1.2 Спречување на паѓање на залихата во негативна вредност (trg_prevent_negative_stock)
Што прави: Спречува која било операција да ја намали количината на залиха под нула, со што се обезбедува дека залихата никогаш нема да биде негативна.
CREATE OR REPLACE FUNCTION trg_fn_prevent_negative_stock()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
IF NEW.quantity_on_hand < 0 THEN
RAISE EXCEPTION
'Stock cannot be negative! Warehouse: %, Product: %, Quantity: %',
NEW.warehouse_id, NEW.product_id, NEW.quantity_on_hand;
END IF;
RETURN NEW;
END;
$$;
CREATE TRIGGER trg_prevent_negative_stock
BEFORE INSERT OR UPDATE ON warehouse_stock
FOR EACH ROW
EXECUTE FUNCTION trg_fn_prevent_negative_stock();
2.Тригери и Функции
Note:
See TracWiki
for help on using the wiki.
