CREATE FUNCTION – Lệnh tạo hàm
Nội dung
1. Mô tả
- Lệnh CREATE FUNCTION dùng để tạo hàm (UDF: User-Defined Function) trong CSDL.
- Hàm là một chương trình con (Sub Program).
- Hàm dùng để thực hiện một xử lý tính toán và trả về kết quả. Ví dụ: tính tuổi, tính điểm trung bình, tính tổng nhập, tổng xuất của vật tư…
- Hàm chỉ cho phép loại tham số đầu vào (INPUT).
- Phân loại:
– Hàm đơn trị (Scalar Function).
– Hàm đọc bảng (Inline Table-Valued Function).
– Hàm tạo bảng (Multi-Statement Table-Valued Function).
2. Cú pháp
- Hàm đơn trị
CREATE FUNCTION Tên_hàm(Khai_báo_tham_số)
RETURNS Kiểu_dữ_liệu_trả_về
AS
BEGIN
Lệnh...
RETURN Giá_trị_trả_về
END
GO
- Hàm đọc bảng
CREATE FUNCTION Tên_hàm(Khai_báo_tham_số)
RETURNS TABLE
AS
RETURN
(
Câu_truy_vấn
)
GO
- Hàm tạo bảng
CREATE FUNCTION Tên_hàm(Khai_báo_tham_số)
RETURNS Tên_biến TABLE(Khai_báo_cấu_trúc_bảng)
AS
BEGIN
INSERT | UPDATE | DELETE
RETURN
END
GO
3. Ví dụ
- Hàm đơn trị
--Hàm tính diện tích hình tròn khi biết bán kính
CREATE FUNCTION dbo.Dien_tich_hinh_tron (@Ban_kinh float = 1.0)
RETURNS float
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN PI() * POWER(@Ban_kinh, 2)
END
GO
--Gọi thực hiện
--Cách 1
PRINT dbo.Dien_tich_hinh_tron(3.5)
GO
--Cách 2
DECLARE @r float =3.5
DECLARE @s float = dbo.Dien_tich_hinh_tron(@r)
PRINT @s
GO
--Hàm tính giai thừa một số nguyên N (N >= 0)
CREATE FUNCTION dbo.Giai_thua (@n int = 1)
RETURNS decimal(38, 0)
AS
BEGIN
RETURN
(
CASE
WHEN @n < 0 THEN NULL
WHEN @n = 0 THEN 1
WHEN @n > 1 THEN CAST(@n AS float) * dbo.Giai_thua(@n - 1)
WHEN @n = 1 THEN 1 END
)
END
--Gọi thực hiện
PRINT dbo.Giai_thua(3)
- Hàm đọc bảng
--Tạo hàm đọc danh sách nhân viên theo mã phòng truyền vào
CREATE FUNCTION Danh_sach_nhan_vien(@depid numeric(3,0))
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM EMPLOYEES
WHERE Department_id = @depid OR @depid = 0
)
GO
--Gọi hàm
SELECT * FROM Danh_sach_nhan_vien(80)
- Hàm tạo bảng
--Tạo hàm
CREATE FUNCTION Thong_ke_nhan_vien()
RETURNS @bang TABLE
(
Maphong numeric(3,0),
Tenphong nvarchar(30),
Sonv tinyint
)
AS
BEGIN
INSERT INTO @bang
SELECT e.Department_id, d.Department_name, COUNT(*)
FROM EMPLOYEES e JOIN DEPARTMENTS d ON e.Department_id = d.Department_id
GROUP BY e.Department_id, d.Department_name
RETURN
END
--Gọi hàm
SELECT * FROM Thong_ke_nhan_vien()
Xem thêm: lệnh sửa hàm ALTER FUNCTION, lệnh xóa hàm DROP FUNCTION.
cám ơn rất nhiều
Rất dễ hiễu, cám ơn bạn nhé
Rất chi tiết và dễ hiểu, cảm ơn bạn!
Cảm ơn rất nhiều