Bài Thực hành Số 10
Mục tiêu: Tạo stored procedure
CSDL mẫu : ToyWorld
Mẫu tạo thủ tục
CREATE PROCEDURE uspGetEmployees2
@FirstName nvarchar(50)
@LastName nvarchar(50),
AS
SELECT FirstName, LastName, Job
FROM Employees
WHERE FirstName LIKE @FirstName
AND LastName LIKE @LastName;
Thực thi
Execute procedureName thamso
Xóa thủ tục
Drop proc ProcedureName
2. Truy vấn để dùng cho báo cáo có dạng sau:
SELECT vFirstName, vLastName, vEmailId
FROM Shopper
Hãy tạo một thủ tục (stored procedure) để tạo truy vấn trên
3. Tạo một thủ tục (stored procedure) nhận vào mã đồ chơi và hiển thị tên
và giá cả của món đồ chơi đó
4. Tạo một thủ tục (stored procedure) để thêm các dữ liệu có dạng như sau
vào bảng ToyBrand
Mẫu insert
INSERT Category VALUES('CategoryId','Category','Descrip')
5. Tạo một thủ tục (stored procedure) có tên là prcAddCategory dùng để
thêm dữ liệu có dạng sau vào bảng Category
6. Xóa thủ tục prcAddCategory
Drop proc procedureName
7. Tạo thủ tục prcCharges trả về phí chuyển hàng (shipping charge) và phí
CREATE PROCEDURE prcGenOrder
@OrderNo char(6)OUTPUT
as
SELECT @OrderNo=Max(cOrderNo) FROM Orders
SELECT @OrderNo=
CASE
WHEN @OrderNo >=0 and @OrderNo<9 Then
'00000'+Convert (char, @OrderNo+1)
WHEN @OrderNo>=9 and @OrderNo<99 Then
'0000'+Convert (char, @OrderNo+1)
WHEN @OrderNo>=99 and @OrderNo<999 Then
'000'+Convert (char, @OrderNo+1)
WHEN @OrderNo>=999 and @OrderNo<9999 Then
'00'+Convert (char, @OrderNo+1)
WHEN @OrderNo>=9999 and @OrderNo<99999 Then
'0'+Convert (char, @OrderNo+1)
WHEN @OrderNo>=99999 Then Convert (char, @OrderNo+1)
END
Khi khách hàng xác nhận mua, các bước sau cần được thực hiện:
a. Mã số hóa đơn được tạo nhờ thủ tục trên
b. Mã số hóa đơn, ngày hiện hành, cart ID, và shopperID cần được đưa vào
bảng Orders
Các bước trên phải được thực hiện cùng 1 lần (phải atomic)
Hãy chuyển giao dịch trên thành một thủ tục với cart Id và shopper ID là
tham số của thủ tục
13. Khi người mua hàng(shopper) yêu cầu gói quà cho món đồ chơi họ mua,
các bước cần thực hiện với hóa đơn của khách như sau: (update tenbang set
tencot=bieuthuc where dieukien)
a. Thuộc tính cGiftWrap nên lưu với giá trị ‘Y’ và thuộc tính cWrapperId nên
được cập nhật với mã gói quà (wrapper id) đã được khách chọn
tùy thuộc vào đơn giá: nếu giá <$10, thì số lượng đặt là 20, giá <$20 thì số
lượng đặt là 10, ngược lại số lượng đặt là 5.
create proc prcPurchaseOrder
AS
select cBrandName,cToyId,vToyName,Quantity = case
when mToyRate< $10 then 20
when mToyRate> $20 then 10
else 5
end
from dbo.Toys t join dbo.ToyBrand b
on b.cBrandId = t.cBrandId
where siToyQoh <60