Tải bản đầy đủ (.ppt) (26 trang)

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

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 (262 KB, 26 trang )

Chương VI : Hàm Do Người Dùng Định Nghĩa

Nhóm 6


Bài 1: Khái quát về hàm
I.

Làm việc với UDFs



I.1 Tạo mới UDFs



Có hai cách để tạo UDFs : Sử dụng câu lệnh T-SQL hoặc dùng
tiện ích Enterprise Manager.

1. Sử dụng câu lệnh T-SQL :
Dùng câu lệnh CREATE FUNCTION để tạo một UDFs bằng
cách sử dụng tiện ích SQL Query Analyzer hoặc sử dụng công
cụ dạng dấu nhắc lệnh (command-prompt) điển hình như công
cụ oslq.
Cú pháp :


Bài 1: Khái quát về hàm
a)



Mệnh đề CREATE FUNCTION
UDFs không có tham số :

CREATE FUNCTION [Test_func]()
 UDFs có tham số :
CREATE FUNCTION [Chuan_Ho_Ten](@Chuoi HoTen
varchar(50))


Bài 1: Khái quát về hàm
b) Mệnh đề RETURNS
 Dùng để thiết lập kiểu dữ liệu trả về của UDFs. Có hai
cách thiết lập chính :
 Trả về giá trị kiểu vô hướng. Khi chỉ định kiểu này, UDFs
sẽ trả về giá trị kết quả đơn lẻ như là : một chuỗi, một giá
trị logic hoặc một giá trị kiểu số.


Bài 1: Khái quát về hàm
 Trả về một table: thực tế bạn có thể chỉ định trả về hai loại
table :
 Inline table :


Bài 1: Khái quát về hàm
 Chú ý :

 Khi sử dụng UDFs loại inline table, bạn cần quan tâm
đến các quy tắc :
 Mệnh đề RETURNS chứa duy nhất từ khóa table. Bạn

không phải định nghĩa kiểu của biến trả về bởi vì nó là
tập được định dạng bởi tập kết quả truy vấn của câu
lệnh SELECT trong mệnh đề RETURN.
 Không có phần thân của hàm với việc bắt đầu bởi
BEGIN và kết thúc với END.
 Mệnh đề RETURN chứa một câu lệnh SELECT đơn
giản nằm trong cặp dấu ngoặc đơn. Câu lệnh SELECT
được sử dụng trong hàm có các hạn chế giống như câu
lệnh SELECT được sử dụng trong đối tượng VIEW.


Bài 1: Khái quát về hàm
 Multistatement table :


Bài 1: Khái quát về hàm
Chú ý :
 Khi sử dụng UDFs loại Multistatement table bạn
cần quan tâm đến các hạn chế sau :
 Không thể gọi một stored procedure từ các câu lệnh
bên trong nó.
 Không thể sử dụng các hàm loại không xác định
được xây dựng sẵn trong SQL Server, ví dụ Getdate,
Rand, …
 Việc sử dụng RAISERROR và @@ERROR là hoàn
toàn không hợp lệ.
 UDFs không thể được sử dụng để sửa đổi thông tin
trên table cơ sở.



Bài 1: Khái quát về hàm
d) Khối lệnh
BEGIN …
END




Sử dụng tiện ích
Enterprise
Manager
Bước 1 : Khởi
động tiện ích
Enterprise
Manager. Chọn
mục User Defined
Functions và chọn
tiếp New User
Defined Function.


Bài 1: Khái quát về hàm
 Bước 2 : 

Xuất hiện màn
hình chỉ định
các thuộc tính
liên quan đến
UDFs đồng thời
cho phép gõ vào

các câu lệnh
trong phần thân
của UDFs.


Bài 1: Khái quát về hàm
II.

Quản lý UDFs

a)


Thay đổi tên của UDFs
Cú pháp :


Bài 1: Khái quát về hàm
b)

Thay đổi nội dung các câu lệnh chứa bên trong UDFs

 Để sửa đổi các câu lệnh bên trong UDFs, bạn có
thể xóa và tạo lại UDFs. Thay vì vậy, bạn có thể
bỏ qua bước xóa bằng cách sử dụng câu lệnh
ALTER FUNCTION.


Bài 1: Khái quát về hàm
c) Xem các UDFs



Khi các UDFs được tạo, tên và thông tin nhận dạng khác
liên quan UDFs được lưu trữ trong table hệ thống có tên
SysObjects.

Chú ý :
 Type = ’IF’ tương ứng với UDFs loại

multistatement table và inline table.
 Type = ’FN’ tương ứng với UDFs loại scalar.


Bài 1: Khái quát về hàm
d.


Xóa UDFs
Xóa một UDFs có nghĩa là gỡ bỏ nó ra khỏi các table hệ
thống SysComments và SysObjects. Bạn có thể sử dụng
câu lệnh DROP FUNCTION để xóa UDFs.



Ví dụ :


Bài 2 : Các Thao Tác trên UDF
I.





Hàm do người dùng định nghĩa (user DefinedFunction)
Đối với người lập trình (lập trình cơ sở dữ liệu cũng
không phải là ngoại lệ) thì công việc viết các thủ tục,
hàm là rất cần thiết
Các thủ tục nội tại(Stored procedure) và các hàm của
người dùng (UDFs) được lưu trong các database trên
server . Chúng được gọi thực hiện bằng T-SQL hoặc gọi
từ ứng dụng



Có 3 loại UDF :





Hàm đơn trị (Scalar Function)
Hàm đọc bảng (inline Table)
Hàm tạo bảng (Multi Statement Table)


Bài 2 : Các Thao Tác trên UDF
II.




Gọi thực hiện các UDF thuộc loại hàm đơn trị.
Hàm trả về đúng 1 giá trị, giá trị trả về có thể là kiểu
chuỗi , số, ngày, giờ,...
Sử dụng cú pháp sau để tạo hàm :
CREATE FUNCTION Tên Hàm (Danh sách tham số)
RETURNS kiểu trả về
BEGIN
--- Khai báo các biến cục bộ
--- Các lệnh xử lý, tính toán
---Trả về giá trị
RETURN Giá trị trả về
END.


Bài 2 : Các Thao Tác trên UDF
 Ví dụ : Tạo hàm đơn trị fnTong2So nhập vào hai số
nguyên và trả ra hàm số tổng :
CREATE FUNCTION fnTong2So(@a INT, @b INT)
RETURNS INT BEGIN
--- Khai báo các biến cục bộ
DECLARE @s INT
--- Các câu lệnh xử lý, tính toán
SET @s = @a+@b
---Trả về giá trị
RETURN @s
END
---Gọi thực hiện
PRINT dbo.fnTong2So(25,18)



Bài 2 : Các Thao Tác trên UDF
 Ví Dụ: Tạo hàm đơn vị fnThamNien nhận vào một ngày vào
làm và trả ra số năm làm việc
CREATE FUNCTION fnThamNien
(@Ngay_vao_lamDATETIME)
RETURNS INT
BEGIN
---Khai báo các biến cục bộ
DECLARE@so_nam INT
---Các lệnh xử lý, tính toán
SET @So_nam = YEAR(GETDATE()) – YEAR(@ngay_vao_lam)
---Trả về giá trị
RETURN @so_nam
END


Bài 2 : Các Thao Tác trên UDF
--Gọi thực hiện
PRINT dbo.fnThamNien(‘1/27/1989’)
---Gọi thực hiện
SELECT EmployeeID, LoginID,
dbo.fnThamNien(HireDate)
FROM HumanResources.Employee.


Bài 2 : Các Thao Tác trên UDF
III.


Sử dụng các UDF thuộc loại hàm đọc bảng:

Hàm trả về một bảng (table) là kết quả của câu lệnh
SELECT.
Sử dụng cú pháp sau để tạo hàm:
CREATE FUNCTION Ten Ham (Danh sách tham số)
RETURN TABLE
AS
RETURN (Câu lệnh SELECT)


Bài 2 : Các Thao Tác trên UDF
 Ví dụ:
 Tạo hàm đọc bảng fnLietKeNV nhận vào mã người quản lý
và trả về bảng chứa các nhân viên của người quản lý đó
 ---Hàm đọc bảng
CREATE FUNCTION fnLietKeNV@ManagerID INT
RETURN TABLE
AS
RETURN (SELECT EmployeeID,LoginID
FROM HumanResources.Employee
WHERE ManagerID=@ManagerID)
GO


Bài 2 : Các Thao Tác trên UDF
---Gọi thực hiện để xem các nhân viên của người quản lý có
mã 21
SELECT * FROM dbo.fnLietKe(21)
---Gọi thực hiện để xem các nhân viên của người quản lý có
mã 185
SELECT * FROM dbo.fnLietKeNV(185)



Bài 2 : Các Thao Tác trên UDF
IV.


Sử dụng các UDF thuộc hàm tạo bảng
Hàm trả về một bảng(table),bảng phải định nghĩa cấu
trúc trong hàm.

Sử dụng cú pháp sau để tạo hàm:
CREATE FUNCTION Tên Hàm(Danh sách tham số)
RETURN@Tên bảng TABLE(Tên cột Kiểu dữ liệu,…)
AS
---Tạo dữ liệu ban đầu cho bảng
---Cập nhật dữ liệu(nếu muốn)
---Kết thúc
RETUN
END


Bài 2 : Các Thao Tác trên UDF
 Ví dụ: Tạo hàm tạo bảng fnLietkeNV nhận vào 1 hoặc 0 và
trả về nhân viên theo các yêu cầu sau:
 Nếu nhận vào 0 thì các nhân viên trả về gồm có
EmployeeID,FirstName
 Nếu nhận vào 1 thì các nhân viên trả về gồm có
EmployeeID,FirestName và LastName
 ---Hàm tạo bảng
CREATE FUNCTION fnLienKetNV(@ten_day_du INT)

RETUNS@bang TABLE(manv INT,ten NVARCHAR(100))
AS
BEGIN


Bài 2 : Các Thao Tác trên UDF
IF @ten_day_du=1
INSERT INTO @bang(manv,ten)
SELECT EmployeeID,FirstName+’,’+LastName
FROM HumanResources.Employee e INNER JOIN
Person.Contactc
ON e.ContactID=c.ContactID
ELSE
INSERT INTO @bang(manv,ten)
SELECT EmployeeID,FirstName
FROM HumanResources.Employee e INNER JOIN
Persion.Contactc
ON e.ContactID=c.ContactID
---Ket thuc
RETURN
END


×