Hệ quản trị CSDL SQL sever

16 266 0
Hệ quản trị CSDL SQL sever

Đ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

Hệ Quản Trị CSDL SQL Sever Chương VI : Hàm Do Người Dùng Định Nghĩa Bài 1: Khái quát hàm người dùng định nghĩa UDFs chương trình đảm trách xử lý với đặc tính nhận tham số đầu vào trả giá trị kết xử lý tính tốn dựa tham số đầu vào nhận I/- Giới thiệu Hàm người dùng định nghĩa (user defined functions – UDFs) đối tượng bổ sung phiên SQL Server 2000 Trước hết bạn cần biết UDFs mang đầy đủ ý nghĩa tính chất hàm đa số ngơn ngữ lập trình khác, có nghĩa UDFs chương trình đảm trách xử lý với đặc tính nhận tham số đầu vào trả giá trị kết xử lý tính tốn dựa tham số đầu vào nhận Không UDFs mà tất hàm nói chung (các phiên SQL Server trước cung cấp hàm cài đặt sẵn getdate(), object_name(), …) phân thành hai nhóm : hàm xác định (deterministic) hàm không xác định (non-deterministic) Các hàm xác định luôn trả giá trị giá trị tham số cung cấp (truyền vào) Các hàm khơng xác định tạo kết khác biệt thời điểm chúng gọi thực hiện, giá trị tham số cung cấp không thay đổi Trong số tài liệu, có thuật ngữ "scalar functions – hàm vô hướng" dùng để hàm trả giá trị, tương phản với hàm trả table Hàm getdate() ví dụ điển hình cho hai : hàm vơ hướng (scalar) hàm không xác định (non-deterministic) Nếu bạn gọi thực hai lần với dòng lệnh gọi, bạn nhận hai kết khác có giá trị cho lần gọi UDFs mang đầy đủ tính chất hàm, ngồi bạn hình dung UDFs kết hợp hai đối tượng View Stored Procedure Hơn nữa, có tính sử dụng mà View Stored Procedure khơng có được, hay nói cách khác khắc phục số hạn chế View Stored Procedure Ví dụ : Stored Procedure phần câu lệnh SELECT UDFs, View không hỗ trợ đệ quy với UDFs bạn làm điều I.1/- Làm việc với UDFs : I.1.1/- Tạo UDFs : Có hai cách để tạo UDFs : sử dụng câu lệnh T-SQL dùng tiện ích Enterprise Manager - Sử dụng câu lệnh T-SQL : Dùng câu lệnh CREATE FUNCTION để tạo UDFs cách sử dụng tiện ích SQL Query Analyzer sử dụng cơng cụ dạng dấu nhắc lệnh (commandprompt) điển cơng cụ oslq Cú pháp : a/- Mệnh đề CREATE FUNCTION Việc tạo UDFs bắt đầu với mệnh đề CREATE FUNCTION theo sau tên UDFs Ngay sau tên UDFs phần khai báo tham số UDFs Chú ý tham số phải tuân thủ quy tắc định danh phải bắt đầu ký tự @ Về nguyên tắc, UDFs khơng có tham số Ví dụ : UDFs khơng có tham số : Ví dụ : UDFs có tham số : b/- Mệnh đề RETURNS Dùng để thiết lập kiểu liệu trả UDFs Có hai cách thiết lập : • Trả giá trị kiểu vơ hướng Khi định kiểu này, UDFs trả giá trị kết đơn lẻ : chuỗi, giá trị logic giá trị kiểu số • Trả table Trên thực tế bạn định trả hai loại table : - Inline table : với loại này, bạn thực bên câu lệnh SELECT rõ ràng không phức tạp UDFs loại thực chất dùng để thay cho đối tượng VIEW, khắc phục nhược điểm khơng có tham số VIEW Bạn hình dung UDFs loại inline table giống VIEW có tham số Ví dụ : Ví dụ : Việc tạo view ví dụ thật khó làm cho ta thỏa mãn trường hợp ta muốn danh sách gồm mặt hàng khơng phải loại Tivi ? VIEW không hỗ trợ tham số Để giải vấn đề này, bạn tạo UDFs với tham số cho phép truyền vào giá trị loại hàng hóa Chú ý : Khi sử dụng UDFs loại inline table, bạn cần quan tâm đến quy tắc : • Mệnh đề RETURNS chứa từ khóa table Bạn khơng phải định nghĩa kiểu biến trả tập định dạng tập kết truy vấn câu lệnh SELECT mệnh đề RETURN • Khơng có phần thân hàm với việc bắt đầu BEGIN kết thúc với END • Mệnh đề RETURN chứa câu lệnh SELECT đơn giản nằm cặp dấu ngoặc đơn Câu lệnh SELECT sử dụng hàm có hạn chế giống câu lệnh SELECT sử dụng đối tượng VIEW - Multistatement table : bạn định kiểu này, UDFs trở nên giống Stored Procedure Nó cho phép thực câu lệnh SELECT phức tạp, cho phép thực câu lệnh logic khác UPDATE, INSERT INTO, … Đồng thời bạn thiết lập cấu trúc cặp dấu ngoặc đơn sau câu lệnh RETURNS Loại trả biến table (chỉ biến table) Ví dụ : Chú ý : Khi sử dụng UDFs loại Multistatement table bạn cần quan tâm đến hạn chế sau : • Khơng thể gọi stored procedure từ câu lệnh bên • Khơng thể sử dụng hàm loại khơng xác định xây dựng sẵn SQL Server, ví dụ Getdate, Rand, … • Việc sử dụng RAISERROR @@ERROR hồn tồn khơng hợp lệ • UDFs khơng thể sử dụng để sửa đổi thông tin table sở c/- Mệnh đề AS Mệnh đề AS khai báo trước câu lệnh bên UDFs d/- Khối lệnh BEGIN … END Phần thân UDFs bắt đầu sau từ khóa BEGIN kết thúc từ khóa END Chú ý khối lệnh không sử dụng cho trường hợp UDFs loại inline table - Sử dụng tiện ích Enterprise Manager Tiện ích Enterprise Manager cho phép bạn tạo UDFs cách trực quan hơn, bạn thực theo bước sau : Bước : Khởi động tiện ích Enterprise Manager Chọn mục User Defined Functions chọn tiếp New User Defined Function Bước : Xuất hình định thuộc tính liên quan đến UDFs đồng thời cho phép gõ vào câu lệnh phần thân UDFs I.1.1/- Quản lý UDFs 1/- Thay đổi tên UDFs Trên thực tế bạn cần sửa đổi tên UDFs, trường hợp bạn sử dụng thủ tục SQL Server cung cấp sẵn có tên sp_rename Cú pháp : Ví dụ : Chú ý : Nếu thực thành công sp_rename trả giá trị 0, bị lỗi trả giá trị khác 2/- Thay đổi nội dung câu lệnh chứa bên UDFs Để sửa đổi câu lệnh bên UDFs, bạn xóa tạo lại UDFs Thay vậy, bạn bỏ qua bước xóa cách sử dụng câu lệnh ALTER FUNCTION Cú pháp câu lệnh ALTER FUNCTION giống CREATE FUNCTION, ALTER FUNCTION không gỡ bỏ UDFs khỏi table hệ thống SysComments SysObjects Ví dụ : 3/- Xem UDFs Khi UDFs tạo, tên thông tin nhận dạng khác liên quan UDFs lưu trữ table hệ thống có tên SysObjects Bạn sử dụng câu lệnh SELECT để hiển thị UDFs có Ví dụ : Chú ý : • Type = ’IF’ tương ứng với UDFs loại multistatement table inline table; • Type = ’FN’ tương ứng với UDFs loại scalar Bạn truy vấn cột TEXT table hệ thống SysComments để thấy câu lệnh chứa bên UDFs Điều thật hữu ích bạn muốn sửa lại nội dung UDFs phải làm việc tiện ích khơng phải Enterprise Manager Ví dụ : 4/- Xóa UDFs Xóa UDFs có nghĩa gỡ bỏ khỏi table hệ thống SysComments SysObjects Bạn sử dụng câu lệnh DROP FUNCTION để xóa UDFs Ví dụ : Bài : Các Thao Tác UDF Hàm người dùng định nghĩa (user DefinedFunction) Đối với người lập trình (lập trình sở liệu khơng phải ngoại lệ) cơng việc viết thủ tục, hàm cần thiết Các thủ tục nội tại(Stored procedure) hàm người dùng (UDFs) lưu database server Chúng gọi thực T-SQL gọi từ ứng dụng Kể từ phiên SQL Server 2000 trở đi, người lập trình với ngơn ngữ T-SQL phép tạo hàm để sử dụng Có 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) II.1: Gọi thực UDF thuộc loại hàm đơn trị Hàm trả giá trị, giá trị trả 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ả BEGIN - Khai báo biến cục - Các lệnh xử lý, tính toán -Trả giá trị RETURN Giá trị trả END Ví dụ : Tạo hàm đơn trị fnTong2So nhập vào hai số nguyên trả hàm số tổng CREATE FUNCTION fnTong2So(@a INT, @b INT) RETURNS INT BEGIN - Khai báo biến cục DECLARE @s INT - Các câu lệnh xử lý, tính tốn SET @s = @a+@b -Trả giá trị RETURN @s END -Gọi thực PRINT dbo.fnTong2So(25,18) Lưu ý: Hàm tạo mặc định schema dbo nên gọi phải có dbo.fnTong2So(25,18) -Xóa hàm fnTong2So DROP FUNCTION fnTong2So Ví Dụ: Tạo hàm đơn vị fnThamNien nhận vào ngày vào làm trả số năm làm việc CREATE FUNCTION fnThamNien (@Ngay_vao_lamDATETIME) RETURNS INT BEGIN -Khai báo biến cục DECLARE@so_nam INT -Các lệnh xử lý, tính tốn SET @So_nam = YEAR(GETDATE()) – YEAR(@ngay_vao_lam) -Trả giá trị RETURN @so_nam END Gọi thực PRINT dbo.fnThamNien(‘1/27/1989’) -Gọi thực SELECT EmployeeID, LoginID, dbo.fnThamNien(HireDate) FROM HumanResources.Employee Ví dụ: Tạo hàm đơn trị để lấy liệu Trong hai ví dụ đầu mang tính cách minh họa cho việc tạo hàm đơn trị Tiếp theo giả sử cần liệt kê nhân viên bảng HumanResources.Employee, thông tin liệt kê bao gồm EmployeeID, FirstName,LastName Nhưng cột FirstName LastName có bảng Person Contact, có nhiều cách để giải sau cách giải sau cách giải hàm đơn trị: SELECT EmployeeID, dbo.fnGetName(ContactID)Name FROM HumanResources.Employee Hàm fnGetName nhận vào Contact ID trả chuỗi FistName,LastName -Hàm đơn trị CREATE FUNCTION fnGetName(@ContactID INT) RETURNS VARCHAR(100) BEGIN -Khai báo biến cục DECLARE @name VARCHAR(100) -Các lệnh xử lý , tính tốn SELECT @name FistName+’,’+LastName FROM Person.Contact WHERE ContactID = @ContactID -Trả giá trị RETURN @name END -Gọi thực SELECT EmplyeeID,dbo.fnGetName(ContactID)Name FROM HumanResources.Employee II.2 Sử dụng UDF thuộc loại hàm đọc bảng Hàm trả bảng (table) kết câu lệnh SELECT Do hàm có câu SELECT nên gọi inline table Function Hàm đọc bảng xem View có tham số 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) Ví dụ: Tạo hàm đọc bảng fnLietKeNV nhận vào mã người quản lý trả bảng chứa nhân viên 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 -Gọi thực để xem nhân viên người quản lý có mã 21 SELECT * FROM dbo.fnLietKe(21) -Gọi thực để xem nhân viên người quản lý có mã 185 SELECT * FROM dbo.fnLietKeNV(185) Ví dụ: Sửa lại hàm đọc bảng fnLietKeNV Giả sử thông tin đọc muốn có them cột FistName LastName phải sửa lại câu lệnh SELECT hàm Có thể làm sau: Sử dụng lại hàm đơn trị fnGetName ví dụ trước Hàm fnGetName nhận vào ContactID trả chuỗi FistName,LastName Hàm fnLietKeNV sửa lại sau: -Sửa lại ALTER FUNCTION fnLietKeNV@ManagerID INT RETURN TABLE AS RETURN (SELECT EmployeeID,LoginID,dbo.fnGetName(ContactID))Name FROM HumanResouces.Employee WHERE ManagerID=@ManagerID) GO -Gọi thực để xem nhân viên người quản lý có mã 185 SELECT * FROM dbo.fnLietKeNV(185) II.3: Sử dụng UDF thuộc hàm tạo bảng Hàm trả bảng(table),bảng phải định nghĩa cấu trúc hàm Do hàm có nhiều câu lệnh nên gọi multi statement Function Sử dụng hàm tạo bảng để tự tạo cấu trúc cho bảng,tạo liệu cho bảng trả bảng tạo 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 liệu,…) AS -Tạo liệu ban đầu cho bảng -Cập nhật liệu(nếu muốn) -Kết thúc RETUN END Ví dụ: tạo hàm tạo bảng fnLietkeNV nhận vào trả nhân viên theo yêu cầu sau: Nếu nhận vào nhân viên trả gồm có EmployeeID,FirstName Nếu nhận vào nhân viên trả gồm có EmployeeID,FirestName LastName -Hàm tạo bảng CREATE FUNCTION fnLienKetNV(@ten_day_du INT) RETUNS@bang TABLE(manv INT,ten NVARCHAR(100)) AS BEGIN -Tao du lieu ban dau cho bang IF @ten_day_du=1 INSERT INTO @bang(manv,ten) SELECT EmployeeID,FirstName+’,’+LastName FROM HumanResources.Employee e INNER JOIN Person.Contact c ON e.ContactID=c.ContactID ELSE INSERT INTO @bang(manv,ten) SELECT EmployeeID,FirstName FROM HumanResources.Employee e INNER JOIN Persion.Contact c ON e.ContactID=c.ContactID -Ket thuc RETURN END -Gọi thực để liệt kê FirstName LastName SELECT *FROM dbo.fnLietKeTenNV(1) -Gọi thực để liệt FirstName SELECT *FROM dbo.fnLietKeTenNV(0) Ví dụ: sửa lại hàm tạo bảng fnLietKeTenNV để hiển thị tên chữ HOA -sửa hàm ALTER FUNCTION fnLietKeTenNV(@ten_day_du_INT) RETURNS @bang TABLE(manv INT,ten NVARCHAR(100)) AS BEGIN -Tạo du lieu ban dau cho bang IN @ten_day_du=1 INSERT INTO @bang(manv,ten) SELECT EmployeeID,FirstName+’,’+LastName FROM HumanResources.Employee e INNER JOIN Person.Contact c ON e.ContactID=c.ContactID ELSE INSERT INTO @bang(manv,ten) SELECT EmployeeID,FirstName FROM HumanResources.Employee e INNER JOIN Person.Contact c ON e.ContactID=c.ContactID -Cập nhật liệu sang chữ HOA UPDATE @bang SET ten=UPPER(ten) -Kết Thúc RETURN END -Gọi thực để liệt kê FirstName Và LastName SELECT * FROM dbo.fnLietKeTenNV(1) ... kiểu liệu trả UDFs Có hai cách thiết lập : • Trả giá trị kiểu vô hướng Khi định kiểu này, UDFs trả giá trị kết đơn lẻ : chuỗi, giá trị logic giá trị kiểu số • Trả table Trên thực tế bạn định trả... database server Chúng gọi thực T -SQL gọi từ ứng dụng Kể từ phiên SQL Server 2000 trở đi, người lập trình với ngơn ngữ T -SQL phép tạo hàm để sử dụng Có loại UDF : - Hàm đơn trị (Scalar Function) - Hàm... để tạo UDFs : sử dụng câu lệnh T -SQL dùng tiện ích Enterprise Manager - Sử dụng câu lệnh T -SQL : Dùng câu lệnh CREATE FUNCTION để tạo UDFs cách sử dụng tiện ích SQL Query Analyzer sử dụng công

Ngày đăng: 23/11/2017, 07:46

Mục lục

  • I/- Giới thiệu

  • I.1/- Làm việc với UDFs :

    • I.1.1/- Tạo mới UDFs :

    • I.1.1/- Quản lý UDFs

Tài liệu cùng người dùng

Tài liệu liên quan