Tải bản đầy đủ (.doc) (6 trang)

Bài tập thực hành môn cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (126.4 KB, 6 trang )

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í


gói hàng (wrapper charge) của 1 hóa đơn được cho.
8. Tạo một thủ tục prcHandlingCharges nhận vào 1 số hóa đơn và hiển thị
phí quản lý (handling charge). Thủ tục này nên sử dụng thủ tục prcCharges
Gợi ý: Handling Charges = Shipping Charges + Gift Wrap Charges. Trong
một thủ tục gọi một thủ tục khác
9. Đoạn chương trình sau được dùng để tạo một thủ tục hiển thị nhãn hiệu
(brand name) tương ứng cho một mã nhãn hiệu (brand id)
CREATE PROCEDURE prcBrand @cBrandId char(3) OUTPUT,
@cBrandName char(16)
as
SELECT @cBrandName = cBrandName
FROM ToyBrand
WHERE cBrandId = @cBrandId
Sau khi tạo xong, thủ tục được chạy thử với các lệnh sau:
DECLARE @cBrandName char(16)
exec prcBrand '001',@cBrandName OUTPUT
SELECT @cBrandName
Mã phát lỗi thay vì hiển thị tên nhãn hiệu tương ứng. Hãy sửa lỗi và chạy lại
10. Tạo một thủ tục prcState trong CSDL TOYWORLD để hiển thị tên và địa
chỉ của tất cả khách mua hàng ở một tiểu bang được cho.
11. Đọan chương trình sau dùng để tạo một thủ tục bổ sung chi tiết của một
chủng lọai mới vào bảng Category
CREATE PROCEDURE prcAddCategory @CategoryId char(3),
@Category char(20), @Descrip char(30)
as
INSERT Category VALUES('CategoryId','Category','Descrip')
Sau khi thủ tục được tao xong, các lệnh sau được dùng để chạy thử:
exec prcAddCategory '017','War Games','A wide range of toy guns'
Lệnh bị báo lỗi và không thực hiện được. Hãy sửa lỗi cho thủ tục trên
12. Thủ tục prcGenOrder tạo mã số hóa đơn có nội dung như sau:

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

b. Phí gói quà (gift wrap charges) cần được cập nhật
Các bước trên cần phải atomic
Hãy chuyển giao dịch trên thành một thủ tục với số hóa đơn, mã đồ chơi, và
mã gói quà là tham số
14. Tạo 1 thủ tục getShopperInfo hiển thị tên, họ khách hàng theo mẫu gợi ý
của người gọi. Nếu người gọi không cung cấp mẫu tên họ cần xem thì mặc
định thủ tục trả về tất cả người mua hàng có tên bắt đầu là B. Ví dụ có thể
gọi thủ tục theo các cách sau:
EXECUTE getShopperInfo;
Or
EXECUTE getShopperInfo N'Wi%';
Or
EXECUTE getShopperInfo @FirstName = N'%';
Or
EXECUTE getShopperInfo N'[CK]ars[OE]n';
Or
EXECUTE getShopperInfo N'Hesse', N'Stefen';
Or
EXECUTE getShopperInfo N'H%', N'S%';
CREATE PROCEDURE HumanResources.uspGetEmployees2
@LastName nvarchar(50) = N'D%',
@FirstName nvarchar(50) = N'%'
AS
SELECT FirstName, LastName, JobTitle, Department
FROM HumanResources.vEmployeeDepartment
WHERE FirstName LIKE @FirstName
AND LastName LIKE @LastName;
15. Tạo 1 thủ tục hiển thị phiếu đặt hàng theo từng nhãn hiệu như mẫu sau:
Tên hiệu Mã đồ chơi Tên đồ chơi Số lượng
Đồ chơi cần phải đặt thêm hàng nếu số lượng tồn kho dưới 20, số lượng đặt

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

×