3. Hàm là một đối tượng trong cơ sở dữ liệu bao gồm một
tập nhiều câu lệnh SQL được nhóm lại với nhau thành
một nhóm
Hàm trả về một giá trị thông qua tên hàm
Điều này cho phép ta sử dụng hàm như là một thành phần
của một biểu thức chẳng hạn như trong các câu lệnh truy
vấn hay các câu lệnh thực hiện cập nhật dữ liệu
Khái niệm
5. CREATE FUNCTION Ten_Ham ([Cac_Tham_So])
RETURNS Kieu_Du_Lieu_Tra_Ve_Cua_Ham
AS
BEGIN
Cac_Cau_Lenh_Cua_Ham
END
Cac_tham_so: có thể có/không và cách nhau bởi dấu phẩy
Cac_tham_so bắt đầu bởi dấu @
6. CREATE FUNCTION tong(@a INT,@b INT)
RETURNS INT
AS
BEGIN
RETURN @a + @b;
END
select dbo.tong(2,3)
Tính tổng 2 số
7. Ví dụ: Lấy giá trị năm hiện hành của máy tính
CREATE FUNCTION dbo.fuGetCurrYear ()
RETURNS int
AS
BEGIN
RETURN YEAR(getdate())
END
select dbo.fuGetCurrYear()
8. CREATE FUNCTION dbo.day(@thang int,@nam int)
RETURNS int
AS
BEGIN
DECLARE @ngay int
IF @thang=2
BEGIN
IF(@nam%400 = 0) or (@nam%4 = 0 and @nam%100 <> 0)
SET @ngay = 29
ELSE
SET @ngay = 28
END
ELSE
SET @ngay
CASE @thang
WHEN 1 THEN 31
WHEN 3 THEN 31
WHEN 5 THEN 31
WHEN 7 THEN 31
WHEN 8 THEN 31
WHEN 10 THEN 31
WHEN 12 THEN 31
WHEN 4 THEN 30
WHEN 6 THEN 30
WHEN 9 THEN 30
WHEN 11 THEN 30
END
RETURN @ngay
END select dbo.day(9,2019)
9. CREATE FUNCTION Thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @KetQua NVARCHAR(10)
SELECT @KetQua=CASE DATEPART(DW,@ngay)
WHEN 1 THEN N’Chủ nhật’
WHEN 2 THEN N’Thứ hai’
WHEN 3 THEN N’Thứ ba’
WHEN 4 THEN N’Thứ tư’
WHEN 5 THEN N’Thứ năm’
WHEN 6 THEN N’Thứ sáu’
ELSE N’Thứ bảy’
END
RETURN (@KetQua) /* Trị trả về của hàm */
END
select dbo.thu(getdate())
10. Một hàm khi đã được định nghĩa có thể được sử dụng như
các hàm do hệ quản trị cơ sở dữ liệu cung cấp (thông
thường trước tên hàm ta phải chỉ định thêm tên của người
sở hữu hàm bằng dbo.) như ví dụ dưới đây:
SELECT e.FirstName, e.LastName,
dbo.Thu(e.BirthDate) AS ThuOfBirth
FROM Employees e
12. Bài tập quản lý bán hang:
Xây dựng HÀM trả về giá trị sau:
- Thêm cột Giảm giá vào table HOA DON.
- Nếu mua từ 1.000.000 đến 2.000.000 giảm 5% của Hoa
don, trên 2.000.000 giảm 10%. Còn lại không giảm
- Cột giảm giá sẽ ghi số % giảm giá
Bài tập
14. create function hocbongsv(@MASV char(10))
returns money
as
begin
declare @hb money,@somon int
set @somon = ( select count(MAMH) from KETQUA K
where K.MASV = @MASV and Diem >=8
group by MASV)
select @hb = case
when @somon =2 then 200000
when @somon= 3 then 300000
when @somon >=4 then 400000
else 0
end
return @hb
end
Sử dụng Hàm
UPDATE SINHVIEN
SET HOCBONG=dbo.hocbongsv(MASV)
15. Hàm trả về giá trị là kiểu bảng
Table valued function
16. • Nếu như scalar function trả về một giá trị (single value) thì
table-valued function trả về một table chứa những giá trị từ
câu lệnh SELECT.
create function TEN_HAM(@parameter_name_parameter_data_type
[=default][….n])
RETURNS TABLE
AS
RETURN
cau_lenh_select;
17. • Tạo table-valued function hiển thị danh sách nhân viên
thuộc phòng ban (với tên phòng ban là tham số).
CREATE FUNCTION dsnv(@tenphong nvarchar(30))
RETURNS TABLE AS
RETURN
(SELECT *
FROM NHANVIEN
WHERE tenphong=@tenphong
);
18. create function sinhvienkhoa(@makhoa char(10))
returns table as
return
(select *
from sinhvien
where makhoa=@makhoa
)
select * from dbo.sinhvienkhoa('cntt')