| Version 3 (modified by , 5 months 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.
