1. Trang chủ
  2. » Giáo án - Bài giảng

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

23 465 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 174 KB

Nội dung

1 Bài 9: Hàm người dùng định nghĩa - Hàm trả về giá trị đơn - Scalar Functions - Hàm UDF trả về bảng: – Inline Table-valued Functions – Multistatement Table-valued Functions 2 Hàm trả về giá trị đơn - Scalar Functions CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type [ = default ] } [ , n ] ]) RETURNS return_data_type [ WITH <function_option> [ , n ] ] [ AS ] BEGIN function_body RETURN scalar_expression END [ ; ] 3 Hàm trả về giá trị vô hướng CREATE TABLE [dbo].[tmpHoaDon]( [Ngay_hd] [datetime] NULL, [KhachHang] [nvarchar](50) NULL, [Ma_hd] [nvarchar](50) NULL, [GhiChu] [nvarchar](100) NULL ) ON [PRIMARY] - Ta thấy dữ liệu trong Ngay_HD gồm có cả ngày tháng năm và giờ phút giây Select Ngay_hd, KhachHang from tmpHoaDon where Ngay_HD=getDate() order by Ngay_HD -Sẽ không được bản ghi nào vì có so sánh cả giớ phút giây Xuất phát từ lý do này ta tạo thủ tục ngày tháng năm Use KhoHang CAST and CONVERT trong BOL • Create Function dbo.GetDay (@Date datetime) • Returns varchar(12) • As • Begin • Return convert(varchar(12),@date,105) • End - Lệnh sau đây sẽ cho các hóa đơn trong ngày hiện thời: Select Ngay_hd, KhachHang from tmpHoaDon where dbo.GetDay(Ngay_HD)=dbo.GetDay(getDate()) order by Ngay_HD 4 Đệ qui (tính số fibonaci) Create function dbo.fibonaci(@n int) returns int as Begin if @n>1 return dbo.fibonaci(@n-1) +dbo.fibonaci(@n-2) return 1 End declare @i int set @i=dbo.fibonaci(5) print @i 5 Hàm UDF trả về bảng Inline Table-valued Functions CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ = default ] } [ , n ] ]) RETURNS TABLE [ WITH <function_option> [ , n ] ] [ AS ] RETURN [ ( ] select_stmt [ ) ][ ; ] 6 Hàm UDF trả về bảng (2) Use khohang Create Function dbo.danhSachHoaDon(@currentDay as Datetime) Returns table As return (select * from tmpHoaDon where dbo.getDay(ngay_hd)=dbo.getDay(@currentDay)) Sử dụng: declare @d datetime set @d=getdate() select * from dbo.danhSachHoadon(@d) Như vậy ta thấy có thể sử dụng hàm giống như view, tuy nhiên ta có thể sử dụng các tham số của hàm để cho view linh họat hơn. 7 Hàm trả về bảng Multistatement Table-valued Functions CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ = default ] } [ , n ] ]) RETURNS @return_variable TABLE < table_type_definition > [ WITH <function_option> [ , n ] ] [ AS ] BEGIN function_body RETURN END [ ; ] 8 Function Options <function_option>::= { [ ENCRYPTION ] | [ SCHEMABINDING ] | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ] | [ EXECUTE_AS_Clause ] } SCHEMABINDING – chỉ định rằng hàm có tham chiếu đến các đối tượng được gọi trong thân hàm (ví dụ các bảng). Khi đó chúng ta không thể xóa các đối tượng này nếu như bảng đang tồn tại. EXECUTE_AS_Clause – Sử dụng giống như trong thủ tục. (Tự thực hành hàm với các tham số EXECUTE_AS Caller,…) 9 Ví dụ Use test CREATE TABLE dbo.employees (empid nchar(5) PRIMARY KEY, empname nvarchar(50), mgrid nchar(5) NULL REFERENCES employees(empid), title nvarchar(30) ) Viết hàm fn_FindReports xác định (hiển thị) tất cả các nhân viên thuộc quyền quản lý của @InputEmpID CREATE FUNCTION dbo.fn_FindReports ( @InputEmpId nchar(5) ) RETURNS @retFindReports TABLE (empid nchar(5) primary key, empname nvarchar(50) NOT NULL, mgrid nchar(5), title nvarchar(30)) 10 Xác định đường dẫn đầy đủ của thư mục create table Directory (ID int identity, FolderName varchar(128), Parent_ID int) CREATE FUNCTION dbo.Path (@ID int) RETURNS varchar(1000) AS BEGIN if @ID is null return '' declare @s varchar(1000), @Parent_ID int select @s=FolderName, @Parent_ID=Parent_ID from Directory where ID=@ID return dbo.Path(@Parent_ID)+@s+'/' END declare @st varchar(40) set @st= dbo.Path(4) print @st [...]... varchar(20) set @st=dbo.path_while(4) print @st 11 Bài tập - Sua bang Directory: them truong Path - Them Trigger (For Insert, Update): Tự động cap nhat du lieu cho truong Path - Giả sử có bảng: Department(Dep_ID, Dep_name, Sup_ID) - Viết hàm xác định danh sách các phòng ban thuộc quyền quản lý của Input_DepID - Xác định các phòng ban cấp trên của Input_DepID 12 Tạo hàm đảo ngược chuỗi Alter Function dbo.fn_DaonguocHoDemTen(@InputSt... order by Kitu COLLATE Vietnamese_CS_AI - Viết hàm sắp xếp theo qui tắc tiếng Việt (Lecture5-SapXepXauKituTiengViet.sql) 16 Hiển thị danh sách tên các sản phẩm Cho biết một tập hợp các ProductID: '9 12 27 37' Cần viết một hàm để hiển thị tên của tất cả các sản phẩm này trong bảng AdventureWorks.Production.Product VD: Use AdventureWorks Get_product_names_iter '9 12 27 37' 17 Hiển thị danh sách tên các sản... Lấy ra từng ID trong vòng lặp này END END END 19 - Xem mã lệnh trong Lecture5-DanhSach.sql Bài tập 1 Cho một xâu kí tự là một tập hợp các phần tử viết cách nhau bởi một dấu ‘.’ Mỗi phần tử gồm có bảy thành phần, các thành phần viết cách nhau một dấu ‘;’ Ví dụ:Mã Hóa Đơn, Người Nhập, Ghi Chú, Mã Sản Phẩm; Tên Sản Phẩm; Số lượng; Đơn giá - Viết thủ tục hoặc hàm phân tích xâu kí tự trên và lấy ra các hóa... sau đó Insert vào bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu, MaSP, TenSP, Soluong,DonGia) 20 Bài tập 2 - Cho một file dữ liệu Input.txt gồm các xâu kí tự như trong bài tập 1 - Giả sử có hai bảng: DMSanPham(MaSP, TenSP) và bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu, MaSP, Soluong, DonGia) - Hãy viết thủ tục hoặc hàm phân tích từng xâu kí tự trong file: - Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì... MaHD, NguoiNhap, GhiChu, MaSP, SoLuong, DonGia lấy được từ xâu vào bảng NhapHangHoa 21 Bài tập 3 - Cho một file dữ liệu Input.txt như trong bài tập 3 - Giả sử có ba bảng: DMSanPham(MaSP, TenSP), bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu) và bảng NhapHangHoaChiTiet (MaHD, MaSP, Soluong,DonGia) - Hãy viết thủ tục hoặc hàm phân tích từng xâu kí tự trong file: - Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP)... bảng NhapHangHoaChiTiet 22 Giới thiệu ứng dụng App1 • Ứng dụng App1 là một minh họa về mô hình ứng dụng nhiều lớp • Các xử lý phức tạp của ứng dụng được viết dưới dạng các hàm hoặc thủ tục trên SQL Server • Minh họa cách triệu gọi các hàm, thủ tục của SQL Server từ phía ứng dụng 23 ... declare @c nvarchar(1) while (@i . 1 Bài 9: Hàm người dùng định nghĩa - Hàm trả về giá trị đơn - Scalar Functions - Hàm UDF trả về bảng: – Inline Table-valued Functions – Multistatement Table-valued Functions 2 Hàm trả về. dbo.danhSachHoadon(@d) Như vậy ta thấy có thể sử dụng hàm giống như view, tuy nhiên ta có thể sử dụng các tham số của hàm để cho view linh họat hơn. 7 Hàm trả về bảng Multistatement Table-valued Functions CREATE. ON NULL INPUT ] | [ EXECUTE_AS_Clause ] } SCHEMABINDING – chỉ định rằng hàm có tham chiếu đến các đối tượng được gọi trong thân hàm (ví dụ các bảng). Khi đó chúng ta không thể xóa các đối tượng

Ngày đăng: 16/06/2014, 13:47

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN