Bài giảng "Cơ sở dữ liệu - Bài 10: Hàm do người dùng định nghĩa (UDF – User Defined Function)" trình bày một số khái niệm liên quan, tạo mới hàm, quản lý hàm, hàm đệ quy, gọi thực hiện hàm. . | Khái niệm n - Bài 10: Hàm do người dùng định nghĩa (UDF – User Defined Function) n - 2/8/2018 Microsoft SQL Server 2005 1 Là một chương trình con: Nhận các giá trị đầu vào Trả về một giá trị 2 nhóm hàm: Hàm xác định (deterministic) Hàm không xác định (non - deterministic) 2/8/2018 Tạo mới hàm Microsoft SQL Server 2005 2 Tạo mới hàm Cú pháp: Create Function Tên_Function (các_tham_số) Returns Kiểu_dữ_liệu_trả_về As Begin Các_lệnh Return End Lưu ý: - Các tham số phải bắt đầu bằng ký hiệu @ - Một hàm có thể không có tham số - Kiểu dữ liệu trả về có thể là một giá trị vô hướng hoặc một bảng dữ liệu n 2/8/2018 Microsoft SQL Server 2005 3 n Ví dụ về tạo hàm đơn trị: Tạo hàm chuyển chuỗi ngày tháng năm sang xâu ký tự theo mã 112 Create Function Namthang(@d datetime) Returns char(6) As Begin Declare @st char(6) Set @st=convert(char(6),@d,112) Return @st End 2/8/2018 Microsoft SQL Server 2005 4 1 Tạo mới hàm Tạo mới hàm Tạo hàm trả về một bảng: - Dạng Inline Table (hàm đọc bảng) Ví dụ: Xây dựng hàm đọc bảng hiển thị danh sách vật tư thuộc loại tivi Create Function DSachTivi() Returns Table As Return (Select * From VATTU where left(MaVTu,2) = 'TV') n 2/8/2018 Microsoft SQL Server 2005 5 Dạng MultiStatement Table (hàm tạo bảng): Ví dụ: Tạo hàm tạo bảng lưu danh sách hàng xuất với giá khuyến mại, tham số truyền vào là mã vật tư và % khuyến mại Create Function DSHangxuat(@MaVTu char(4), @Phantram numeric) Returns @DSHangxuat Table (SoPX char(4), MaVT char(4), SlXuat int, Giakhuyenmai money) - 2/8/2018 Tạo mới hàm Microsoft SQL Server 2005 6 Tạo mới hàm Dạng MultiStatement Table (hàm tạo bảng) (tiếp): As Begin Insert Into @DSHangxuat(SoPX,MaVT,SlXuat,Giakhuyenmai) Select * From CTPXUAT where MaVTu = @MaVTu Update @DSHangxuat Set Giakhuyenmai= Giakhuyenmai*(100-@Phantram)/100 Return End - 2/8/2018 Microsoft SQL Server 2005 Các lưu ý khi tạo hàm: Với hàm đọc bảng: - Phần thân hàm không đặt trong Begin End - Câu lệnh Select có các hạn chế như .