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

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).

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

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...

2 Responses

  1. long viết:

    cám ơn rất nhiều

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

Trả lời

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 *