SlideShare a Scribd company logo
1 of 19
Download to read offline
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Khoa Công nghệ thông tin –Đại học Sài Gòn
FUNCTION
 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
Hàm trả về là một giá trị
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 @
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ố
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()
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)
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())
 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
Bài tập
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
Hàm sau khi được tạo sẽ lưu
Hàm sau khi tạo
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)
Hàm trả về giá trị là kiểu bảng
Table valued function
• 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;
• 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
);
create function sinhvienkhoa(@makhoa char(10))
returns table as
return
(select *
from sinhvien
where makhoa=@makhoa
)
select * from dbo.sinhvienkhoa('cntt')
Thank you!

More Related Content

Similar to TH2 - function.pdf

Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdfimquang
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)khanhtoankmz
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗipnanhvn
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Minh Tri Lam
 
lap trinh c Phan2 chuong5
 lap trinh c Phan2 chuong5 lap trinh c Phan2 chuong5
lap trinh c Phan2 chuong5thanhyu
 
Hàm và nạp chồng hàm
Hàm và nạp chồng hàmHàm và nạp chồng hàm
Hàm và nạp chồng hàmLAnhHuy4
 
Cursor & Function trong SQL Server
Cursor & Function trong SQL ServerCursor & Function trong SQL Server
Cursor & Function trong SQL ServerHuy Vũ
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoHuy Nguyễn
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoBác Luân
 
Hàm (function)
Hàm (function)Hàm (function)
Hàm (function)Son Nguyen
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Vo Oanh
 

Similar to TH2 - function.pdf (20)

View sp trigger_udf
View sp trigger_udfView sp trigger_udf
View sp trigger_udf
 
Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdf
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
 
hàm_nocopy.pdf
hàm_nocopy.pdfhàm_nocopy.pdf
hàm_nocopy.pdf
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
 
lap trinh c Phan2 chuong5
 lap trinh c Phan2 chuong5 lap trinh c Phan2 chuong5
lap trinh c Phan2 chuong5
 
Hàm và nạp chồng hàm
Hàm và nạp chồng hàmHàm và nạp chồng hàm
Hàm và nạp chồng hàm
 
Chuong 01
Chuong 01Chuong 01
Chuong 01
 
Chuong 01 mo dau
Chuong 01 mo dauChuong 01 mo dau
Chuong 01 mo dau
 
Chuong 04 ham
Chuong 04 hamChuong 04 ham
Chuong 04 ham
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Cursor & Function trong SQL Server
Cursor & Function trong SQL ServerCursor & Function trong SQL Server
Cursor & Function trong SQL Server
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Hàm (function)
Hàm (function)Hàm (function)
Hàm (function)
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
 

TH2 - function.pdf

  • 1. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Khoa Công nghệ thông tin –Đại học Sài Gòn
  • 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
  • 4. Hàm trả về là một giá trị
  • 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
  • 13. Hàm sau khi được tạo sẽ lưu Hàm sau khi tạo
  • 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')