CREATE FUNCTION – Lệnh tạo hàm

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.

You may also like...

4 Responses

  1. long viết:

    cám ơn rất nhiều

  2. Rất dễ hiễu, cám ơn bạn nhé

  3. Nguyễn Duy Luân viết:

    Rất chi tiết và dễ hiểu, cảm ơn bạn!

  4. tung viết:

    Cảm ơn rất nhiều

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *