Beruflich Dokumente
Kultur Dokumente
delimiter //
DROP PROCEDURE IF EXISTS processOrder;
CREATE PROCEDURE processOrder (OUT TotalOrders INTEGER,OUT TotalValue DECIMAL(12
,6))
BEGIN
DECLARE done INT Default 0;
DECLARE QtyO,Stock INT;
DECLARE OV DECIMAL(12,6);
DECLARE pID,cid,OId VARCHAR(20);
DECLARE d DATE;
DECLARE iterator CURSOR FOR SELECT order_id,customer_id,order_value FROM orders
OM WHERE OM.order_id=
(select o.order_id from orderItem o where disptach_status="pendi
ng" AND o.order_id=OM.order_id);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN iterator;
SET Totalvalue=0;
SET TotalOrders=0;
REPEAT
FETCH iterator into OId,cid,OV;
IF NOT done THEN
SET TotalOrders=TotalOrders+1;
SET Totalvalue=Totalvalue+OV;
select product_id,qty_ordered from OrderItem where order
_id=OId into pID,QtyO;
select qty_in_stock from product where Product_id=pID i
nto Stock;
IF Stock >= QtyO THEN
SET stock=stock-QtyO;
UPDATE product SET qty_in_stock=stock WHERE prod
uct_id=pID;
UPDATE Customer SET total_order_value=total_orde
r_value+OV WHERE customer_id=cid;
UPDATE OrderItem SET disptach_status="dispatched
" WHERE order_id=OId;
END IF;
END IF;
UNTIL done END REPEAT;
close iterator;
END //
delimiter ;
---------->Trigger<----------------------
delimiter //
DROP TRIGGER IF EXISTS InsertValues;
CREATE TRIGGER InsertValues AFTER UPDATE ON OrderItem FOR EACH ROW
Begin
DECLARE PID,OID VARCHAR(20);
DECLARE SValue,SQty int;
DECLARE done INT;
DECLARE iterator CURSOR FOR SELECT sale_value,sale_qty FROM DayToDaySales where
productName=(select Product_name from Product where Product_id=NEW.product_id)
AND sale_date= cast(now() AS DATE);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
SET PID=NEW.product_id;
SET OID=NEW.order_id;
OPEN iterator;
FETCH iterator into SValue,SQty;
IF done THEN
insert into DayToDaySales values((select Product_name from produ
ct where product_id=PID),cast(now() AS DATE),
(select Qty_ordered from OrderItem where order_id=OID),
(select product_price from Product where product_id=PID),
(select order_value from Orders where order_id=OID));
ELSE
update DayToDaySales SET sale_qty=SQty+(select qty_ordered from
orderitem where order_id = OID) where productName=(select Product_name from prod
uct where product_id=PID);
update DayToDaySales SET Sale_Value=(select order_value from ord
ers where Order_id=OID)+SValue where productName=(select Product_name from produ
ct where product_id=PID);
END IF;
close iterator;
END //
delimiter ;