Tài liệu thực hành môn CƠ SỞ DỮ LIỆU
Trang 1Bài Thực hành Số 13
Mục tiêu: Tạo cursor, hàm của người dùng (user-defined function)
CSDL mẫu: Northwind,Toyworld
CSDL mẫu Toyworld
1 Tạo 1 view tên là Dolls chứa toàn bộ đồ chơi là búp bê (doll) với tuỳ chọn WITH CHECK OPTION Sau đó thực hiện các lệnh sau trên view vừa tạo
- Chèn 1 đồ chơi mới có tên Boom , chủng loại là games
- Thay đổi chủng loại của đồ chơi tên là Pet Loving Doll thành Infant (mã 008)
Có thực hiện được không? Tại sao?
Sửa lại view loại bỏ tuỳ chọn WITH CHECK OPTION và chạy lại các lệnh trên Có thực hiện được không? Tại sao?
2 Viết 1 câu lệnh SELECT có dùng lệnh CASE để hiển thị nội dung của bảng orders theo mẫu sau:
Order No Shopper Name Note
000001 Barbara Johnson Both wrapping and shipping
000002 Catherine Roberts Both wrapping and shipping
000003 Christopher Davis Only shipping but not wrapping
000004 Charles Brown Both wrapping and shipping
000005 Barbara Johnson Both wrapping and shipping
000006 Donna Anderson Both wrapping and shipping
000007 Cynthia Miller Only shipping but not wrapping
000008 Daniel Wilson Both wrapping and shipping
000009 David Moore Both wrapping and shipping
000010 Betty Williams Both wrapping and shipping
3 Tình trạng của các hóa đơn của mỗi ngày cần được hiển thị Báo cáo nên hiển thị thông báo “high sales” cho những ngày mà tổng doanh thu lơn hơn 170, ngược lại hiển thị thông báo “Low sales” Mẫu báo cáo có dạng như sau:
Trang 24 Đọan chương trình sau dùng cursor để hiển thị tổng chi phí chuyển hàng mỗi ngày từ bảng Orders:
declare @orddate char(15)
declare @totalshippingcharges money
declare @msg varchar(120)
declare ordershipcharge cursor for
select dorderdate,sum(mshippingcharges) from orders
group by dorderdate
open ordershipcharge
fetch ordershipcharge
into @orddate,@totalshippingcharges
While (@@fetch_status = 0)
begin
select @msg = @orddate + CONVERT(char(10),
@totalshippingcharges)
select @msg
end
close ordershipcharge
deallocate ordershipcharge
Khi thực hiện đọan mã trên, thì kết quả không được hiển thị Hãy tìm lỗi
và sửa lại chương trình
5 Tạo một transaction để tăng giá mToyRate cho tất cả đồ chơi trong bảng Toys lên $5 nếu tổng đơn giá của tất cả các đồ chơi thấp hơn$100
Trang 36 Tạo một cursor để cập nhật cột siToyQOH trong bảng Toys bằng cách giảm đi 1 lượng bằng với giá trị hiện có trong cộtsiQty của bảng
ShoppingCart
CSDL Northwind
7 Viết hàm tính diện tích hình chữ nhật khi cho biết chiều dài và rộng
8 Viết hàm trả về kết quả là một bảng (Table) chứa các thông tin sau: Tên nhà cung cấp (CompanyName), mã sản phẩm (ProductID), tên sản phẩm (Product Name), đơn giá trung bình (price) Lưu ý viết bằng hai cách: Inline Table-Valued Functions và MultiStatement Table-Valued
Function
9 Viết hàm trả về tổng thành tiền của một hóa đơn nào đó
Thanhtien= (SốLượng* đơngiá) *(1- ChiếtKhấu)
10 Viết hàm trả về chiết khấu của sản phẩm dựa vào số lượng sản phẩm được mua trong hóa đơn với quy định sau:
Nếu số lượng <=5 thì chiết khấu là 0.05
Nếu số lượng từ 6 đến 10 thì chiết khấu 0.07
Nếu số lượng từ 11 đến 20 thì chiết khấu là 0.09 ngược lại thì 0.1
11 Tạo hàm để lọc dữ liệu từ 1 view theo trình tự sau:
a Tạo 1 view có tên là vw_QuarterlySales chứa tổng số lượng hàng bán được theo từng quý của mỗi chủng loại (category) hàng hóa
b Tạo 1 inline function để lọc dữ liệu tổng hợp của 1 chủng loại được cho
c Viết lệnh gọi hàm
12 Tạo 1 hàm có hai tham số là họ và tên, hàm trả về tên tắt với dạng như sau:
Ho=’Nguyen’, ten=’Anh’ thì tên tắt có dạng ‘N.A.’
Sử dụng hàm này để khai báo bảng mới tên KhachMoi có 3 trường như sau: