Tải bản đầy đủ (.pdf) (5 trang)

Tài liệu tham khảo - CITD - Bến Tre 4. Ham

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (97.61 KB, 5 trang )

Hàm (Function)

Đặc điểm của hàm




Trần Thị Bạch Huệ

Nội dung








Đặc điểm của hàm
Hàm được xây dựng sẵn (built-in function)
Hàm do người dùng định nghĩa (User
Defined Function – UDF)
Scalar UDF
Inline UDF
Multi statement UDF



Có thể sử dụng biến và cấu trúc điều khiển
trong function giống như trong sp.
Function có thể dùng trong lệnh sql, còn sp


thì không
Có thể tạo các function trả về 1 giá trị hoặc
trả về 1 table.

Hàm được xây dựng sẵn


Là các hàm đã được định nghĩa sẵn trong
SQL Server như hàm max( ), min( ), avg( ),
getdate( ), left( ), right( ),… Chúng ta chỉ cần
gọi để sử dụng.

1


Hàm do người dùng định nghĩa



Hàm do người dùng tạo ra
SQL Server cho phép tạo 3 loại hàm:








Ví dụ 1:

CREATE FUNCTION nhan2so (@so1 int, @so2
int)
RETURNS bigint
AS
BEGIN
RETURN @so1*@so2
END

Scalar: Trả về một giá trị. Function có thể nhận
tới 1024 tham số hay không nhận tham số nào.
Inline Table-valued: Sử dụng một câu lệnh Select
để trả về một tập dòng.
Multi-statement Table-valued: Sử dụng nhiều câu
lệnh để trả về một tập các dòng.

Scalar UDF



Trả về một giá trị
Tạo hàm bằng lệnh:
CREATE FUNCTION tên_hàm ([ds các tham số])
RETURNS (KDL trả về)
AS BEGIN
các_câu_lệnh_của_hàm
END



Tạo query liệt kê các môn học với số tiết

tăng gấp đôi
select tenmh,dbo.nhan2so(st,2)
from monhoc

2


Inline UDF


Sử dụng một câu lệnh Select để trả về một tập dòng



CREATE FUNCTION tên_hàm ([ds các tham số])
RETURNS TABLE AS
RETURN (câu_lệnh_select)



Sử dụng hàm LayHTSV để lấy họ tên của
sinh viên mang mã A01
select * from dbo.LayHTSV(N'A01')

Chú ý: Trong phần thân hàm chỉ có duy nhất một
câu lệnh SELECT sau lệnh RETURN. Ngoài ra
không sử dụng bất kỳ câu lệnh nào khác trong phần
thân hàm

Multi statement UDF



Ví dụ 2: Tạo hàm lấy ra họ tên sinh viên tuỳ
vào mã sinh viên truyền vào cho tham số
CREATE FUNCTION LayHTSV (@ma nvarchar(4))
RETURNS TABLE AS
RETURN (select hosv, tensv from sinhvien where
masv=@ma)




Sử dụng nhiều câu lệnh để trả về một tập
các dòng
Tạo hàm bằng lệnh:
CREATE FUNCTION tên_hàm ([ds các tham số])
RETURNS @biến_bảng TABLE
(liệt_kê_các_cột_cho_bảng_mới)
AS BEGIN
Các_lệnh_trong_thân_hàm
RETURN END

3




Ví dụ 3: Tạo hàm để trả về bảng gồm các cột
họ tên sinh viên, môn học và điểm (tức là
bảng đểm của sinh viên) với điều kiện:





Nếu tham số truyền vào là ‘A00’ thì bảng kết quả
chứa điểm cho tất cả các sinh viên
Nếu tham số truyền vào là một mã sinh viên cụ
thể thì bảng kết quả chỉ chứa điểm liên quan đến
sinh viên đó





Tạo câu query với lệnh:
select * from InBangDiem(N'A00')
 Quan sát kết quả
Tạo câu query với lệnh
select * from InBangDiem(N'A01')
 Quan sát kết quả

Bài tập
ALTER FUNCTION InBangDiem (@ma nvarchar(4))
RETURNS @BangDiem TABLE
(hosv nvarchar(50), tensv nvarchar(50), tenmh nvarchar(50),diem int )
AS BEGIN
if (@ma=N'A00')
insert into @BangDiem
select hosv, tensv, tenmh, diem from sinhvien, ketqua, monhoc
where sinhvien.masv = ketqua.masv and ketqua.mamh= monhoc.mamh

else
insert into @BangDiem
select hosv, tensv, tenmh, diem from sinhvien, ketqua, monhoc
where sinhvien.masv = ketqua.masv and ketqua.mamh= monhoc.mamh and
sinhvien.masv = @ma
RETURN END








Tạo lại hàm như ví dụ 3. Tuy nhiên bảng điểm trả về
chỉ có 3 cột là hoten, tenm, và diem
Tạo hàm để tính học phí cho từng môn học biết một
tiết là 55000 đồng
Tạo hàm để lấy điểm trung bình cho từng sinh viên
Tạo hàm đếm số sinh viên của khoa được truyền
vào tham số

4


Chỉnh sửa hàm





Trả lời thắc mắc

Dùng lệnh ALTER FUNCTION để thay đổi
định nghĩa hàm.
Cấu trúc lệnh ALTER FUNCTION tương tự
CREATE TABLE

Xoá hàm





Dùng lệnh DROP TABLE để xoá hàm
Cấu trúc lệnh DROP TABLE
DROP TABLE tên_hàm
Ví du 4: Xoá hàm LayHTSV
DROP TABLE LayHTSV

5



×