0% found this document useful (0 votes)
3 views

Lab 5 21L-5285

Uploaded by

pc240400100fba
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Lab 5 21L-5285

Uploaded by

pc240400100fba
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

CREATE VIEW OrderTotalPrice AS

SELECT O.OrderID, SUM(I.Price * OI.Quantity) AS TotalPrice


FROM Orders O
JOIN OrderItems OI ON O.OrderID = OI.OrderID
JOIN Items I ON OI.ItemID = I.ItemID
GROUP BY O.OrderID;

CREATE VIEW ItemsDoingWell AS


SELECT I.ItemID, I.ItemName, SUM(OI.Quantity) AS TotalQuantitySold
FROM Items I
JOIN OrderItems OI ON I.ItemID = OI.ItemID
GROUP BY I.ItemID, I.ItemName
HAVING SUM(OI.Quantity) > 20;

CREATE VIEW StarCustomers AS


SELECT C.CustomerID, C.CustomerName, SUM(O.TotalPrice) AS TotalPurchases
FROM Customers C
JOIN Orders O ON C.CustomerID = O.CustomerID
GROUP BY C.CustomerID, C.CustomerName
HAVING SUM(O.TotalPrice) > 2000;

CREATE VIEW CustomersWithPhoneCheck AS


SELECT CustomerID, CustomerName, Phone
FROM Customers
WHERE Phone IS NOT NULL
WITH CHECK OPTION;

CREATE PROCEDURE AddOrderDetails (


IN p_OrderID INT,
IN p_ItemID INT,
IN p_Quantity INT
)
BEGIN
DECLARE availableQuantity INT;

-- Get the available quantity of the item in the store


SELECT QuantityInStore INTO availableQuantity
FROM Items
WHERE ItemID = p_ItemID;

IF availableQuantity < p_Quantity THEN


SELECT CONCAT('Only ', availableQuantity, ' is present, which is less than
your required quantity.');
ELSE
-- Insert order details
INSERT INTO OrderItems (OrderID, ItemID, Quantity)
VALUES (p_OrderID, p_ItemID, p_Quantity);

-- Subtract the ordered quantity from the store


UPDATE Items
SET QuantityInStore = QuantityInStore - p_Quantity
WHERE ItemID = p_ItemID;
END IF;
END;

CALL AddOrderDetails(1, 101, 5);

CREATE PROCEDURE CustomerSignup (


IN p_CustomerID INT,
IN p_CustomerName VARCHAR(255),
IN p_City VARCHAR(255),
IN p_Phone VARCHAR(10),
OUT p_Flag INT
)
BEGIN
DECLARE countCustomer INT;

-- Check if customer number is unique


SELECT COUNT(*) INTO countCustomer
FROM Customers
WHERE CustomerID = p_CustomerID;

IF countCustomer > 0 THEN


SET p_Flag = 1;
RETURN;
END IF;

-- Check if city is not null


IF p_City IS NULL THEN
SET p_Flag = 2;
RETURN;
END IF;

-- Check if phone number is exactly 6 digits


IF LENGTH(p_Phone) != 6 THEN
SET p_Flag = 3;
RETURN;
END IF;

-- Insert customer if all conditions are satisfied


INSERT INTO Customers (CustomerID, CustomerName, City, Phone)
VALUES (p_CustomerID, p_CustomerName, p_City, p_Phone);

SET p_Flag = 0;
END;

CALL CustomerSignup(1, 'Awab', 'Lahore', '123456', @Flag);


SELECT @Flag;

CREATE PROCEDURE CancelOrder (


IN p_CustomerID INT,
IN p_OrderID INT
)
BEGIN
DECLARE countOrders INT;

-- Check if the customer has placed the order


SELECT COUNT(*) INTO countOrders
FROM Orders
WHERE CustomerID = p_CustomerID AND OrderID = p_OrderID;

IF countOrders = 0 THEN
SELECT CONCAT('Order no ', p_OrderID, ' is not of customer ',
p_CustomerID);
ELSE
-- Delete the order details and the order itself
DELETE FROM OrderItems WHERE OrderID = p_OrderID;
DELETE FROM Orders WHERE OrderID = p_OrderID;
SELECT CONCAT('Order no ', p_OrderID, ' has been cancelled.');
END IF;
END;

CALL CancelOrder(1, 101);

CREATE PROCEDURE GetCustomerPoints (


IN p_CustomerName VARCHAR(255),
OUT p_TotalPoints INT
)
BEGIN
DECLARE totalSpent INT;

-- Calculate total spent by the customer


SELECT SUM(O.TotalPrice) INTO totalSpent
FROM Orders O
JOIN Customers C ON O.CustomerID = C.CustomerID
WHERE C.CustomerName = p_CustomerName;

-- Calculate points (1 point for every Rs100 spent)


SET p_TotalPoints = totalSpent / 100;
END;

CALL GetCustomerPoints('Awab', @TotalPoints);


SELECT @TotalPoints;

You might also like