Professional Documents
Culture Documents
2.
DELIMITER $$
CREATE TRIGGER before_orderdetails_insertCancelled
BEFORE INSERT ON OrderDetails
FOR EACH ROW
BEGIN
IF NEW.quantityOrdered > (SELECT quantityInStock FROM Products WHERE
Products.productCode = NEW.productCode) THEN
SIGNAL SQLSTATE '45100' SET MESSAGE_TEXT = "Không đủ lượng mặt hàng theo yêu
cầu ";
END IF;
END$$
DELIMITER ;
3(Slide).
DELIMITER $$
CREATE TRIGGER update_after_cancel
AFTER UPDATE ON orders FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE prodCode varchar(50);
DECLARE quan_in_stok INT;
DECLARE cur CURSOR FOR
SELECT productCode, quantityOrdered FROM orderdetails
WHERE oderdetails.orderNumber = NEW.orderNumber;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
IF ( NEW.status = "Cancelled") THEN open_loop: LOOP
FETCH cur INTO prodCode, quan_in_stok;
IF done THEN LEAVE open_loop;
END IF;
UPDATE products SET quantityInStock = quantityInStock + quan_in_stok
WHERE productCode = prodCode;
END LOOP;
END IF;
CLOSE cur;
END$$
DELIMITER ;
1(PDF).
CREATE TABLE Khuyen_mai(
Mahoadon INT(20) NOT NULL,
Sotien DECIMAL(10,2) NOT NULL,
PRIMARY KEY(Mahoadon)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DELIMITER $$
CREATE TRIGGER order_sale
AFTER UPDATE ON orderdetails FOR EACH ROW
BEGIN
DECLARE total decimal(10,2);
SELECT SUM(quantityOrdered*priceEach) INTO total FROM orderdetails
WHERE orderdetails.orderNumber = NEW.orderNumber
GROUP BY orderdetails.orderNumber;
IF(NEW.orderNumber IN (SELECT MaHoaDon FROM Khuyen_mai) AND total > 65000) THEN
UPDATE Khuyen_mai
SET Sotien = total * 0.95
WHERE MaHoaDon = NEW.orderNumber;
ELSEIF(total > 65000) THEN
INSERT INTO Khuyen_mai(MaHoaDon, Sotien)
VALUES (NEW.orderNumber, total*0.95);
END IF;
END $$
DELIMITER ;
2(PDF).
ALTER TABLE inventory
ADD is_available BOOLEAN;
DELIMITER $$
CREATE TRIGGER film_rental_update_status
AFTER UPDATE ON rental FOR EACH ROW
BEGIN
IF NEW.return_date is null THEN
UPDATE inventory
SET is_available = false
WHERE inventory_id = NEW.inventory_id;
ELSE
UPDATE inventory
SET is_available = true
WHERE inventory_id = NEW.inventory_id;
END IF;
END $$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER film_rental_return_status
AFTER INSERT ON rental FOR EACH ROW
BEGIN
IF NEW.return_date is null THEN
UPDATE inventory
SET is_available = false
WHERE inventory_id = NEW.inventory_id;
ELSE
UPDATE inventory
SET is_available = true
WHERE inventory_id = NEW.inventory_id;
END IF;
END $$
DELIMITER ;