Tải bản đầy đủ (.doc) (3 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 (55.01 KB, 3 trang )

Bài Thực hành Số 11
Mục tiêu: Tạo triggers
CSDL mẫu : ToyWorld, HeadHunt, Pubs
A. CSDL ToyWorld
1. Thực tập hàm RAISERROR
a. Xem nội dung bảng sysmessages của CSDL master. Thêm 1 message của
người dùng vào bảng sysmessages bằng lệnh sau:
USE master
EXEC sp_addmessage 50001, 16, ‘Mặt hàng có tên %s đã có trong bảng
%s.'
b. Sử dụng thông báo lỗi vùa tạo bằng lệnh RAISERROR như sau:
declare @s1 char(10) , @s2 varchar(20)
set @s2 =’Toys’
set @s1 = 'Large Duck'
raiserror (50001, 16, 1, @s1,@s2)
2. Khi có một hóa đơn mới, chi tiết của hóa đơn được lưu trữ trong bảng
OrderDetail. Hệ thống phải giảm số lượng tồn kho của những đồ chơi nào
được mua trong hóa đơn bằng với số lượng được đặt mua. Hãy tạo trigger
cho việc cập nhật tự động này khi phát sinh một hoá đơn mới
3. Nếu khách mua hàng (shopper) thay đổi số lượng mua trong hóa đơn,thì
số tiền mua cũng phải tự động thay đổi theo. Công thức tính như sau:
Toy cost = Quantity * Toy Rate. Hãy tạo trigger cho lệnh cập nhật này
4. Khi khách hàng quyết định gói quà cho 1 món đồ chơi nào đó và đã chọn
được kiểu gói quà thích hợp, thì kiểu gói này phải được cập nhật bằng
lệnh UPDATE vào trường cWrapperID của bảng Order details. Hãy tạo 1
trigger cho lệnh này để thực hiện tự động các bước tiếp theo sau khi lệnh
UPDATE trên được thực hiện:
• Thay đổi trường cGiftWrap từ ‘N’ sang ‘Y’
• Cộng thêm phí gói quà mWrapperRate (từ bảng Wrapper) vào
thành tiền của món đồ chơi đó theo công thức sau:
Toycost = Toycost + mWrapperRate


1
5. Tạo 1 trigger hiển thị dòng cảnh báo ‘Notify shopper relations’ sau khi người
dùng thực hiện 1 trong hai lệnh Update hay insert vào bảng Shopper
6. Tạo 1 trigger kiểm tra tình trạng thẻ tín dụng của người mua hàng mỗi khi
họ đặt mua một hóa đơn mới. Nếu thẻ tín dụng từ năm 2000 trở về trước thì bị
xem là không hợp lệ, trigger sẽ hủy bỏ hóa đơn mới và thông báo cho người
mua hàng biết
6. Tạo 1 view vwOrder để hiển thị thông tin của 1 hoá đơn theo mẫu sau:
Order
No
Order
date
Shopper
Name
Toy ID Toy
Name
Toy
Rate
Quantity Wrapper
Description
Toy
Cost

Người dùng rất hay dùng view này để chỉnh sửa một số trường Order date,
Toy ID, Quantity. Hãy giúp người dùng thực hiện việc này thuận lợi nhất
7. Tạo một trigger cho lệnh delete 1 bản ghi bất kỳ trong bảng order details
sao cho sau khi xóa xong nó sẽ cập nhật tự động lại trường ToyCost,
mGiftWrapCharge của 1 bản ghi tương ứng trong bảng orders
8. Hãy tạo 1 view như sau:
CREATE VIEW ConcatView

AS
SELECT cShopperID, vFirstName + ' ' + vLastName AS CombinedName
FROM Shopper
Hãy tạo 1 trigger loại INSTEAD OF INSERT cho view vừa tạo, nếu đã có quy
ước là khi dùng view để nhập 1 khách mua hàng mới thì trường CombineName
luôn được nhập theo định dạng sau 'first_name;last_name'
B. CSDL Headhunt
1. Khi có 1 nhân viên nghỉ việc thì cần cập nhật ngày nghỉ việc (Resignation
Date) vào bảng Employee. Hãy tạo trigger cho lệnh này để thực hiện tự
động việc giảm đi 1 cho trường quân số hiện hành (iCurrentStrength) của
bảng Position
C. CSDL Pubs
1. Khi phát sinh 1 hoá đơn bán sĩ mới, một bản ghi mới được nhập vào bảng
sales, số lượng bán này cần được cộng dồn vào trường ytd_sales của
bảng titles. Hãy tạo trigger cho lệnh insert của bảng sales
2
2. Hãy tạo 1 trigger để ngăn không cho phép xoá bất kỳ bản ghi nào của
bảng titles, authors và publishers
Bài tập làm thêm
Kiểm tra hoạt động của các bảng magic có tên là inserted và deleted theo các
bước sau:
- Tạo bảng tên là Test_Trigger có các trường sau:
Tên trường Kiểu dữ liệu Thuộc tính
c_date Datetime Not null
Old_ID Char(6) Not null
New_ID Char(6) Not null
- Tạo trigger sau:
create trigger update_trigger
on shopper for update
as

declare @c1 char(6), @c2 char(6)
select @c1 = shopperID from inserted
select @c2 = shopperID from deleted
insert Test_Trigger values (getdate(), @c2, @c1)
- Thực hiện lệnh sau:
update shopper
set cShopperID = ‘AAAAAA’
where cShopperID =’000001’
- Thực hiện lệnh sau:
select * from Test_Trigger
Nhận xét??
3

×