Tải bản đầy đủ (.pdf) (38 trang)

Bài giảng Cơ sở dữ liệu: Hàm do người dùng định nghĩa - ThS. Nguyễn Ngọc Quỳnh Châ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 (284.58 KB, 38 trang )

HÀM DO NGƯỜI DÙNG ĐỊNH NGHĨA
(USER-DEFINED FUNCTION)


KHÁI NIỆM
• Là một đối tượng của CSDL
• Có hai loại hàm:
– Hàm do hệ quản trị CSDL cung cấp sẵn
– Hàm do người dùng tự định nghĩa để phục vụ cho
mục đích của riêng mình

• Có thể sử dụng hàm trong các biểu thức tính
toán.


CÁC LOẠI HÀM
• Hàm vô hướng: trả về một giá trị
• Hàm thao tác trên bản ghi: trả về một bảng


ĐỊNH NGHĨA HÀM VÔ HƯỚNG
• Cú pháp:


VÍ DỤ VỀ HÀM
• Ví dụ về hàm vô hướng: viết một hàm để tính
số lượng nhân viên trong một phòng
CREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )
RETURNS int
AS
BEGIN


DECLARE @SL int;
SELECT @SL = COUNT (*)
FROM NhanVien
WHERE MaPhong=@BienMaPhong ;
RETURN (@SL);
END


VÍ DỤ VỀ HÀM
Sử dụng hàm:
SELECT Ham_Soluong_Phong('KD');
SELECT MaPhong, count (*)
FROM NhanVien
GROUP BY MaPhong
HAVING count(*) >
Ham_Soluong_Phong('QT')


ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG
• Cú pháp 1:
CREATE FUNCTION Tên_hàm ([tham số])
RETURNS TABLE
BEGIN
Các câu lệnh
END


ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG
• Ví dụ 1: viết hàm để trả về danh sách nhân viên
trong phòng.

CREATE FUNCTION HAM_DSPHONG
(@bienmaphong char(5))
RETURNS TABLE
AS
BEGIN
RETURN (SELECT MANV, HOTEN, DIACHI FROM
NHANVIEN WHERE MAPHONG=@bienmaphong)
END


• Ví dụ 2: Viết một hàm trả về ngày sinh của
một nhân viên. Tham số của hàm là mã nhân
viên.
• Viết một thủ tục sử dụng hàm đó so sánh ngày
sinh của hai nhân viên bất kỳ. Nếu trùng nhau
thì in ra “Hai nhân viên cùng ngày sinh”.
Ngược lại thì in ra “Hai nhân vien không cùng
ngày sinh”


VÍ DỤ VỀ HÀM
• Sử dụng hàm HAM_DSPHONG:
• SELECT * FROM HAM_DSPHONG(‘QT’)


ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG
• Cú pháp 2


ĐỊNH NGHĨA HÀM TRẢ VỀ BẢNG

Ví dụ 2: sử dụng cú pháp 2 để viết lại hàm trong ví dụ 1:
CREATE FUNCTION HAM_DSPHONG (@bienmaphong
char(5))
RETURNS @kq TABLE (MaNV char(10), hoten nchar(40),
diachi nchar(50))
AS
BEGIN
INSERT INTO @kq SELECT MANV, HOTEN, DIACHI FROM
NHANVIEN WHERE MAPHONG=@bienmaphong
RETURN
END


BÀI TẬP
• Cho CSDL như sau:
– Sinhvien (MãSV, Họ tên, Ngày sinh, Mã lớp )
– Lớp (Mã lớp, Tên lớp, Mã khóa)
Câu 1: Viết hàm để tính xem một ngày nào đó là rơi vào
thứ mấy trong tuần. (Gợi ý, sử dụng cấu trúc IF…ELSE
hoặc cấu trúc CASE).
Câu 2: Viết hàm cho biết (mã khóa, tổng số sinh viên)
của một khóa nào đó. (Mã khóa >=1)
Câu 3: Viết hàm cho biết (mã khóa, tổng số sinh viên)
của một khóa nào đó.. Trong trường hợp khóa có giá
trị=0 thì cho biết (mã khóa, tổng số sinh viên) của tất cả
các khóa


KHÁC NHAU GIỮA HÀM VÀ THỦ TỤC
• Sinh viên tự tìm hiểu



VIEW


KHÁI NIỆM
– View là bảng không chứa dữ liệu, nó chỉ là truy vấn
dữ liệu từ 1 hay nhiều bảng. View được lưu thành
một đối tượng của SQL SV
– NSD có thể áp dụng ngôn ngữ thao tác dữ liệu trên
các View giống như Table.


ĐỊNH NGHĨA VIEW
Cú pháp:

CREATE VIEW <Tên_View>
[(<danh sách tên cột>) ]
AS
<Câu lệnh SELECT>


Ví dụ 1: tạo View nv_kinh doanh
CREAT VIEW nv_kinhdoanh
AS
SELECT Manv, Hoten, Luong
FROM NHANVIEN
* Sử dụng View:
SELECT * FROM NV_KINHDOANH



Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)
CREAT VIEW nv_tre (Manv, Hoten, Tuoi)
AS
SELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh)
FROM NHANVIEN
WHERE Year(Getdate()) – Year(Ngaysinh) <= 35
* Sử dụng View:
SELECT * FROM NV_TRE
 Nếu một thuộc tính trong View được xây dựng từ một
biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.


HAI LOẠI VIEW
• VIEW chỉ đọc (read-only view): View này chỉ
dùng để xem dữ liệu
• VIEW có thể cập nhật (updatable view):
– Xem dữ liệu
– Có thể sử dụng câu lệnh INSERT, UPDATE,
DELETE để cập nhật dữ liệu trong các bảng
cơ sở qua View


• Các yêu cầu để tạo view có thể cập nhật:Câu
lệnh SELECT trong định nghĩa VIEW không
được chứa:
– Mệnh đề DISTINCT hoặc TOP.
– Một hàm kết tập (Aggregate function).
– Một giá trị được tính toán.
– Mệnh đề GROUP BY và HAVING.

– Toán tử UNION.
– Mệnh đề JOIN
• Nếu câu lệnh tạo View vi phạm một trong số điều
kiện trên =>VIEW được tạo ra là VIEW chỉ đọc.


MỤC ĐÍCH DÙNG VIEW
• Hạn chế quyền truy cập dữ liệu của người
dùng
• Hạn chế tính phức tạp của dữ liệu đối với
người sử dụng đơn giản
• Tóm lược nhiều cơ sở dữ liệu vật lý vào một
cơ sở dữ liệu logic


TRIGGER


KHÁI NIỆM
• Là một stored procedure đặc biệt
• Trigger không có tham số đầu vào, đầu ra
• Trigger tự động chạy khi có một hành động liên
quan đến nó xảy ra.
• Sử dụng trong việc:
– Kiểm tra dữ liệu nhập
– Tính toán, cập nhật giá trị tự động

• Các loại trigger: INSERT TRIGGER, DELETE
TRIGGER, UPDATE TRIGGER, TRIGGER tổng hợp



Cú pháp
CREATE TRIGGER <tên triger>
ON <tên bảng>|<tên view>
FOR | AFTER| INSTEAD OF
<INSERT [, UPDATE] [, DELETE]>
AS
<câu lệnh SQL>


×