Khái niệm hàm người dùng
(user define function):
Hầu hết các ngôn ngữ lập trình, hay cơ sở dữ liệu lớn, luôn luôn có một phần mở rộng cho phép người dùng tự định nghĩa một số quy tắc, hàm hoặc thủ tục.
User define function giống như stored procedure của SQL server. Hàm người dùng cũng có thể truyền tham số nhưng không được mang thuộc tính OUTPUT. Thay vào đó chúng ta dùng câu lệnh RETURN
26 trang |
Chia sẻ: oanh_nt | Lượt xem: 2889 | Lượt tải: 2
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Sql server: function, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
FUNCTION Nội dung chi tiết Giới thiệu Tạo Function Hiệu chỉnh Function Xóa Function Ví dụ Giới thiệu Khái niệm hàm người dùng (user define function): Hầu hết các ngôn ngữ lập trình, hay cơ sở dữ liệu lớn, luôn luôn có một phần mở rộng cho phép người dùng tự định nghĩa một số quy tắc, hàm hoặc thủ tục. User define function giống như stored procedure của SQL server. Hàm người dùng cũng có thể truyền tham số nhưng không được mang thuộc tính OUTPUT. Thay vào đó chúng ta dùng câu lệnh RETURN. Giới thiệu (tt) Có hai loại hàm do người dùng định nghĩa: Hàm người dùng trả về giá trị Hàm người dùng trả về một bảng dữ liệu Giới thiệu Function cho phép: Nhận tham số vào Gọi hàm bằng lệnh EXECUTE giống như gọi PROCEDURE (đối với hàm trả về kiểu vô hướng) Giới thiệu Chú ý: Hàm do người dùng định nghĩa không dùng giá trị với kiểu dữ liệu ntext, text, image, cursor, timestamp làm giá trị trả về. Có thể cung cấp thông tin về lỗi nếu phát sinh. Có thể sử dụng các hàm do người dùng định nghĩa trong các câu lệnh SQL như SELECT. Nội dung chi tiết Giới thiệu Tạo Function Hiệu chỉnh Function Xóa Function Ví dụ Tạo Function (trả về giá trị) Cú pháp CREATE FUNCTION ( [ @ [ = ]] [ ,...n ] ) RETURNS [ AS ] BEGIN RETURN END Tạo Function (tt) Ví dụ: tính tổng 2 số nguyên Gọi Function Cách 1: PRINT 'TONG: ' + STR(DBO.TONG(6,3)) Cách 2: DECLARE @TONG INT --EXEC DBO.TONG 6,3 SET @TONG = DBO.TONG(6,3) SELECT @TONG CREATE FUNCTION TONG(@a INT, @b INT) RETURNS INT BEGIN RETURN @a+@b END Tạo Function (tt) Hàm tự viết: Chuyển ngày về đạng DDMMYYYY: create Function dbo.dngayDDMMYYYY(@date smalldatetime) returns varchar(10) AS Begin return convert(varchar(10),@Date,103) End Ứng dụng hàm người dùng: select MaNV, Hoten, dbo.dngayDDMMYYYY(Ngaysinh), Phai from NHANVIEN Hàm người dùng trả về một bảng dữ liệu: Ngoài giá trị trả về là kiểu số nguyên, số thực, kiểu ký tự… Hàm người dùng còn cho phép giá trị trả về là một bảng dữ liệu. Khi đó, công việc này rất giống với VIEW. Tuy nhiên VIEW không thể sử dụng giá trị từ bên ngoài truyền vào. Tạo Function (trả về bảng dữ liệu) Cú pháp CREATE FUNCTION [owner_name.] ten_ham (@ten_bien [AS] kieu_gia_tri_bien [ = default ] ,...) RETURNS TABLE AS RETURN (cau_lenh_select) Chú ý: phần thân của hàm chỉ cho phép sự xuất hiện duy nhất của câu 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 của hàm. Ví dụ: create function dbo.HienthiNV() returns Table AS Return (Select * from NHANVIEN) Ứng dụng: Sau khi tạo thành công. Chúng ta có thể sử dụng hàm như sau: select * from dbo.HienthiNV() Tạo Function (trả về bảng dữ liệu) Ứng dụng hàm người dùng trả về bảng dữ liệu (trường hợp có tham số truyền vào): Create function dbo.HienthiNV(@MaNV varchar(4)) returns Table AS Return (select MaNV, Hoten, Ngaysinh, Phai from NHANVIEN where MaNV like @MaNV) Tạo Function (trả về bảng dữ liệu) Trong trường hợp cần phải sử dụng đến nhiều câu lệnh trong phần thân của hàm, ta sử dụng cú pháp như sau để định nghĩa hàm: CREATE FUNCTION tên_hàm([danh_sách_tham_số]) RETURNS @biến_bảng TABLE định_nghĩa_bảng AS BEGIN các_câu_lệnh_trong_thân_hàm RETURN END Khi định nghĩa hàm dạng này cần lưu ý một số điểm sau: Cấu trúc của bảng trả về bởi hàm được xác định dựa vào định nghĩa của bảng trong mệnh đề RETURNS. Biến @biến_bảng trong mệnh đề RETURNS có phạm vi sử dụng trong hàm và được sử dụng như là một tên bảng. Câu lệnh RETURN trong thân hàm không chỉ định giá trị trả về. Giá trị trả về của hàm chính là các dòng dữ liệu trong bảng có tên là @biến_bảng được định nghĩa trong mệnh đề RETURNS. Ví dụ: create function F4(@MaNV varchar(5)) returns @Tonghop table ( MaPX int, MaNV varchar(5) ) as begin if (@MaNV='') INSERT INTO @Tonghop select MaPX, MaNV from PHIEUXUAT else INSERT INTO @Tonghop select MaPX, N.MaNV from NHANVIEN N, PHIEUXUAT P where N.MaNV=P.MaNV and N.MaNV=@MaNV return end Thực thi: select * from F4('NV01') select * from F4('') Hiệu chỉnh Function Cú pháp (chung cho cả 3 dạng): ALTER FUNCTION ( [ @ [ = ]] [ ,...n ] ) RETURNS [ AS ] BEGIN RETURN END Hiệu chỉnh Function (tt) Ví dụ: tính tổng 3 số nguyên ALTER FUNCTION TONG(@a INT, @b INT, @c INT) RETURNS INT BEGIN RETURN @a+@b+@c END Nội dung chi tiết Giới thiệu Tạo Function Hiệu chỉnh Function Xóa Function Ví dụ Xóa Function Cú pháp Ví dụ DROP FUNCTION DROP FUNCTION TONG Nội dung chi tiết Giới thiệu Tạo Function Hiệu chỉnh Function Xóa Function Ví dụ Ví dụ 1 Tính tổng lương theo mã phòng CREATE FUNCTION TONG_LUONG_PHONG(@PHG INT) RETURNS INT BEGIN DECLARE @TONGLUONG INT SET @TONGLUONG = (SELECT SUM(LUONG) FROM NHANVIEN WHERE PHG = @PHG) RETURN @TONGLUONG END Ví dụ 2 Tính tổng thời gian theo tên đề án CREATE FUNCTION TONG_TG_DA(@TENDA NVARCHAR(40)) RETURNS FLOAT BEGIN DECLARE @TONG_TG FLOAT SET @TONG_TG = (SELECT SUM(THOIGIAN) FROM PHANCONG, DEAN WHERE TENDA = @TENDA AND SODA = MADA) RETURN @TONG_TG END
Các file đính kèm theo tài liệu này:
- sql_05_function.ppt