Chương 9:
FUNCTION
Giáo viên: Tạ Thúc Nhu
Khoa CNTT trường ĐH Lạc Hồng
HỆ QUẢN TRỊ CSDL
SQL SERVER
Mã hó
a
2
I-Khái niệm:
I-Khái niệm:
Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục. Điểm khác
biệt giữa hàm vàthủ tục là:
• Hàm trả về một giátrị vô hướng (scalar value) hoặc một bảng
dữ liệu. Điều này cho phép ta sử dụng hàm trong biểu thức hoặc
trong mệnh đề FROM.
• Hàm không cótham số Output.
Mã hó
a
3
II-Tạo hàm trả về giátrị vô hướng (Scalar):
II-Tạo hàm trả về giátrị vô hướng (Scalar):
CREATEFUNCTION tên_hàm ([danh_sách_tham_số])
RETURNS <kiểu dữ liệu trả về của hàm>
AS
BEGIN
Các_câu_lệnh_của_hàm
RETURN [<giá_trị>]
END
• Hàm không trả về giátrị kiểu timestamp.
Mã hó
-Gọi hàm trong phát biểu EXEC
DECLARE @Thu int
Exec @Thu = dbo.func_Thu ‘5/15/2009’
Print @Thu
Mã hó
a
6
III-Tạo hàm trả về một bảng dữ liệu
III-Tạo hàm trả về một bảng dữ liệu
• Có2 loại hàm trả về một bảng dữ liệu:
–Hàm nội tuyến (Inline table-valued functions)
–Hàm nhiều phát biểu (Multistatement table-valued
functions)
• Hàm trả về bảng dữ liệu cóthể được sử dụng trong mệnh
đề FROM.
• Khi gọi hàm trả về bảng dữ liệu không cần chỉ định tên
người dùng như hàm Scalar
Mã hó
a
7
1-Tạo hàm nội tuyến:
(Inline table-valued functions)
1-Tạo hàm nội tuyến:
(Inline table-valued functions)
CREATEFUNCTION tên_hàm ([danh_sách_tham_số])
RETURNS TABLE
AS
RETURN (câu_lệnh_select)
Mã hó
a
(Multistatement table-valued functions)
CREATEFUNCTION tên_hàm([danh_sách_tham_số])
RETURNS @biến_bảng TABLE (cấu_trúc_ bảng)
AS
BEGIN
các_câu_lệnh_trong_thân_hàm
RETURN
END
Vídụ: Xây dựng hàm tạo bảng chứa số mặt hàng trong từng
loại hàng nếu MaLH=0, ngược lại chỉ hiển thị số mặt hàng
của loại hàng đã chỉ định.
Mã hó
a
11
Vídụ:
Vídụ:
CREATEFUNCTION Func_TongMH(@MaLH SMALLINT = 0)
RETURNS @bangthongke TABLE(MaLH NVARCHAR(5),
TenLH NVARCHAR(50), TongSoMH INT )
AS
BEGIN
IF @MaLH=0
INSERT @bangthongke SELECT lh.MaLH,TenLH,COUNT(*)
FROM LoaiHang lh INNER JOIN MatHang mh ON lh.MaLH=mh.MaLH
GROUP BY lh.MaLH,TenLH
ELSE
INSERT @bangthongke SELECT lh.MaLH,TenLH,COUNT(*)
FROM LoaiHang lh INNER JOIN MatHang mh ON lh.MaLH=mh.MaLH
WHERE lh.MaLH = @MaLH GROUP BY lh.MaLH,TenLH
RETURN /*Trả kết quả về cho hàm*/
14
V-Xem Thông Tin Hàm:
V-Xem Thông Tin Hàm:
1. Liệt kê danh sách hàm trong CSDL hiện hành:
Select * From Sys.Objects
Where Type In (‘FN’, 'IF', 'TF')
2. Liệt kê danh sách tham số của thủ tục:
Select* From sys.Parameters
Where Object_ID= Object_ID(' func_Thu‘)
3. Xem nội dung thủ tục: SP_HELPTEXT ‘func_Name’