Version 3 (modified by 3 days ago) ( diff ) | ,
---|
Тригер: trg_after_t_type_insert
Автоматски го менува статусот на производот откако ќе се финализира набавката.
Логика:
- Се зема производот поврзан со TransactionID.
- Ако типот е 'Buy', производот добива статус 'sold'.
- Ако типот е 'Rent', производот добива статус 'rented'.
SQL код:
CREATE TRIGGER trg_after_t_type_insert AFTER INSERT ON t_type FOR EACH ROW BEGIN DECLARE v_product_id INT; SELECT ProductID INTO v_product_id FROM procurement WHERE TransactionID = NEW.TransactionID; IF NEW.Type = 'Buy' THEN UPDATE product SET Status = 'sold' WHERE ProductID = v_product_id; ELSEIF NEW.Type = 'Rent' THEN UPDATE product SET Status = 'rented' WHERE ProductID = v_product_id; END IF; END;
Тригер: refund_wallet_after_reject
Автоматски да се рефундира сумата на клиентот доколку неговото барање биде одбиено. Логика:
- Кога статусот на барањето се менува од нешто друго во 'Rejected', парите се враќаат назад на соодветниот паричник (wallet).
SQL код:
CREATE TRIGGER refund_wallet_after_reject AFTER UPDATE ON procurement_request FOR EACH ROW BEGIN IF NEW.Status = 'Rejected' AND OLD.Status != 'Rejected' THEN UPDATE wallet SET Balance = Balance + NEW.TotalPrice WHERE WalletID = NEW.CardID; END IF; END;
Тригер: prevent_duplicate_pending_request
Спречува додавање на ново барање за набавка за производ кој веќе има статус Pending. Логика:
- Доколку веќе постои барање за истиот ProductID со статус 'Pending', се прекинува внесувањето и се прикажува грешка.
SQL код:
CREATE TRIGGER prevent_duplicate_pending_request BEFORE INSERT ON procurement_request FOR EACH ROW BEGIN IF EXISTS ( SELECT 1 FROM procurement_request WHERE ProductID = NEW.ProductID AND Status = 'Pending' ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'This product already has a pending request; END IF; END;
Note:
See TracWiki
for help on using the wiki.