SQL Server _04

78 1.3K 10
SQL Server _04

Đ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

chuong cuoi

Chương IV: Thủ tục lưu trữ, hàm, trigger Ths. Nguyễn Hồng Hạnh Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.1 Khái niệm thủ tục lưu trữ Các thủ tục lưu trữ là một trong những đối tượng cơ sở dữ liệu. Có thể xem chúng tương tự như những thủ tục trong các ngôn ngữ lập trình. Mỗi một thủ tục lưu trữ có thể có các khả năng sau:  Nhận các tham số đầu vào, thực thi các câu lệnh bên trong thủ tục và trả về các giá trị.  Bên trong mỗi thủ tục có thể chứa các câu lệnh nhằm thực hiện các thao tác trên cơ sở dữ liệu (kể cả việc gọi đến các thủ tục lưu trữ khác)  Trả về một giá trị trạng thái thông qua đó có thể xác định việc thực thi thủ tục là thành công hay bị lỗi. Khi một thủ tục lưu trữ đã được định nghĩa, nó có thể được gọi thông qua tên thủ tục, nhận các tham số truyền vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các giá trị sau khi thực hiện xong. Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.1 Khái niệm thủ tục lưu trữ Lợi ích của Stored Procedure  Người lập trình và quản lý CSDL sẽ viết các thủ tục lưu trữ để thực thi nhiều công việc khác nhau có liên quan đến quá trình truy xuất và quản lý dữ liệu.  Sử dụng stored procedures đưa đến rất nhiều lợi ích thông qua việc sử dụng các câu lệnh Transact-SQL. Như là:  Tăng khả năng bảo mật với hệ thống  Sử dụng lại kết quả biên dịch  Giảm thiểu sự lưu thông trên mạng  Module hóa công việc Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) Lợi ích của Stored Procedure  Tăng khả năng bảo mật với hệ thống:Thay vì cấp phát quyền trực tiếp cho người sử dụng trên các câu lệnh SQL và trên các đối tượng cơ sở dữ liệu, ta có thể cấp phát quyền cho người sử dụng thông qua các thủ tục lưu trữ, nhờ đó tăng khả năng bảo mật đối với hệ thống.  Sử dụng lại kết quả biên dịch: SQL Server chỉ biên dịch các thủ tục lưu trữ một lần và sử dụng lại kết quả biên dịch này trong các lần tiếp theo trừ khi người dùng có những thiết lập khác. Việc sử dụng lại kết quả biên dịch không làm ảnh hưởng đến hiệu suất hệ thống khi thủ tục lưu trữ được gọi liên tục nhiều lần.  Giảm thiểu sự lưu thông trên mạng:.Thủ tục lưu trữ cho phép thực hiện cùng một yêu cầu bằng một câu lệnh đơn giản thay vì phải sử dụng nhiều dòng lệnh SQL. Điều này sẽ làm giảm thiểu sự lưu thông trên mạng. Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.1 Khái niệm thủ tục lưu trữ Các thủ tục lưu trữ trả về kết quả theo 4 cách:  Sử dụng các tham số output  Sử dụng các lệnh trả về giá trị, các lệnh này luôn trả về giá trị số nguyên.  Tập các giá trị trả về của mỗi câu lệnh SELECT có trong thủ tục lưu trữ hoặc của quá trình gọi một thủ tục lưu trữ khác trong một thủ tục lưu trữ.  Một biến con trỏ toàn cục có thể tham chiếu từ bên ngoài thủ tục. Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.2 Tạo thủ tục lưu trữ Cú pháp: CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số) (kiểu_dữ_liệu)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Các_câu_lệnh_của_thủ_tục Trong đó: Danh sách tham số: biến truyền vào cho thủ tục “@biến” để thực thi Kiểu dữ liệu: Quy định kiểu dữ liệu cho biến WITH RECOMPILE: yêu cầu SQL Server biên dịch lại thủ tục lưu trữ mỗi khi được gọi. WITH ENCRYPTION: yêu cầu SQL Server mã hóa thủ tục lưu trữ. Các_câu_lệnh_của_thủ_tục: Các lệnh T-SQL. Các lệnh này có thể nằm trong cặp BEGIN…END hoặc không. Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.2 Tạo thủ tục lưu trữ Ví dụ Thủ tục lưu trữ Thực thi thủ tục 01 CREATE PROCEDURE Show_Products AS SELECT * FROM Product EXECUTE Show_Products 02 CREATE PROC sp_List @bten nchar(20) AS SELECT sid, sname, city FROM Supplier WHERE sname= @bten EXEC sp_List ‘Lubber’ Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.3 Lời gọi thủ tục lưu trữ Thủ tục lưu trữ được gọi theo cấu trúc Tên_thủ_tục_lưu _trữ [danh_sách_tham_số] Lưu ý: danh sách tham số truyền vào trong lời gọi phải theo đúng thứ tự khai báo các tham số trong thủ tục lưu trữ. Nếu thủ tục được gọi từ một thủ tục khác, thực hiện bên trong một trigger hay phối hợp với câu lệnh SELECT, cấu trúc như sau; Exec Tên_thủ_tục_lưu _trữ [danh_sách_tham_số] Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.4 Biến trong thủ tục lưu trữ Trong thủ tục lưu trữ có thể có các biến nhằm lưu các kết quả tính toán hay truy xuất từ CSDL. Các biến trong thủ tục được khai báo bằng từ khóa DECLARE theo cấu trúc như sau: DECLARE @tên_biến kiểu_dữ_liệu Ví dụ: create procedure sp_TimKHLonTuoiNhat as begin declare @maxAge int select @maxAge = max(year(getdate())-year(BIRTHDAY)) from customers select CUSTOMERNAME, BIRTHDAY from customers where year(getdate())-year(BIRTHDAY)=@maxAge end Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1. Thủ tục lưu trữ (Stored Procedure) 4.1.5 Giá trị trả về trong thủ tục lưu trữ Có 3 trường hợp trả về giá trị khi thực thi thủ tục lưu trữ:  Nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là “biến” thì những thay đổi giá trị của biến trong thủ tục sẽ không được giữ lại khi kết thúc quá trình thực hiện thủ tục. Ví dụ: Tạo thủ tục lưu trữ Thực thi thủ tục create procedure sp_TestOutput @a int, @b int, @c int as select @c = @a + @b Declare @tong int set @tong = 0 exec sp_TestOutput 100, 200, @tong select @tong as [gia tri tra ve] [...]... select * from Supplier where sname = @sname end 1 exec sp_TestDefault1 2 exec sp_TestDefault1 ‘Pitts’ Lưu ý: Giá trị mặc định có thể NULL Trong trường hợp này, nếu người sử dụng không cung cấp tham số, SQL Server sẽ thi hành thủ tục theo các tham số khác Giá trị mặc định có thể bao gồm các ký tự đại diện (%, _, [ ], [^] ) nếu thủ tục sử dụng tham số với từ khóa LIKE Chương IV: Thủ tục lưu trữ, hàm, trigger... @max_quantity; Chương IV: Thủ tục lưu trữ, hàm, trigger 4.1 Thủ tục lưu trữ (Stored Procedure) 4.1.10 Một số lưu ý sử dụng thủ tục lưu trữ Câu lệnh CREATE PROCEDURE không thể kết hợp với các câu lệnh SQL khác trong một khối lệnh đơn (single batch) Định nghĩa CREATE PROCEDURE ngoại trừ những câu lệnh sau: CREATE VIEW CREATE TRIGGER CREATE DEFAULT CREATE PROCEDURE Bên trong một thủ tục, ta không thể... thể áp dụng cho một bảng Tuy nhiên, một trigger đơn có thể áp dụng cho cả 3 công việc (UPDATE, INSERT và DELETE) Cú pháp Ví dụ CREATE TRIGGER trigger_name ON table_name FOR {INSERT, UPDATE, DELETE} AS sql_ statements CREATE TRIGGER tgr_check ON Supplier FOR INSERT, UPDATE AS print '*** Ket qua sau khi cap nhat ***' SELECT * FROM Supplier Thực hiện thêm 1 bản ghi vào bảng, quan sát kết quả insert into... = 't_CheckCustomerName1' and type = 'TR') drop trigger t_CheckCustomerName1 go Chương IV: Thủ tục lưu trữ, hàm, trigger 4.2 Trigger (bẫy lỗi) – Các khái niệm cơ bản Bảng INSERTED và bảng DELETED Chuẩn SQL định nghĩa hai bảng logic INSERTED và DELETED để sử dụng trong các trigger mỗi khi dữ liệu được thay đổi Cấu trúc của hai bảng này tương tự như cấu trúc của bảng mà trigger tác động đến Dữ liệu trong... lỗi 34 4.3 Trigger (bẫy lỗi) – DML Triggers 4.3.1 Insert Trigger Cú pháp: CREATE TRIGGER ON {FOR INSERT} AS [IF UPDATE (tên_cột)…] [(AND|OR) UPDATE (tên_cột)…] 35 Ví dụ INSERT Trigger CREATE TRIGGER KiemTra_SoLuongCC ON SupplyProduct FOR INSERT AS IF (SELECT Quantity FROM inserted) > 10000 BEGIN PRINT ‘Số lượng hàng cung cấp không vượt quá 10000’ ROLLBACK . cho biến WITH RECOMPILE: yêu cầu SQL Server biên dịch lại thủ tục lưu trữ mỗi khi được gọi. WITH ENCRYPTION: yêu cầu SQL Server mã hóa thủ tục lưu trữ. Các_câu_lệnh_của_thủ_tục:. tăng khả năng bảo mật đối với hệ thống.  Sử dụng lại kết quả biên dịch: SQL Server chỉ biên dịch các thủ tục lưu trữ một lần và sử dụng lại kết quả biên

Ngày đăng: 05/05/2013, 07:26

Hình ảnh liên quan

Các trigger là các đối tượng CSDL nên chúng được liệt kê trong bảng hệ thống sysobjects - SQL Server _04

c.

trigger là các đối tượng CSDL nên chúng được liệt kê trong bảng hệ thống sysobjects Xem tại trang 28 của tài liệu.
Chạy câu lệnh này sẽ báo lỗi bằng cách in ra màn hình câu thông báo như sau: Số lượng hàng cung cấp không vượt quá 10000 - SQL Server _04

h.

ạy câu lệnh này sẽ báo lỗi bằng cách in ra màn hình câu thông báo như sau: Số lượng hàng cung cấp không vượt quá 10000 Xem tại trang 34 của tài liệu.
Tạo Trigger kiểm tra khi xóa thông tin trên bảng Student: không cho phép xóa những sinh viên là nữ. - SQL Server _04

o.

Trigger kiểm tra khi xóa thông tin trên bảng Student: không cho phép xóa những sinh viên là nữ Xem tại trang 45 của tài liệu.
Dữ liệu trong hai bảng trên như sau: - SQL Server _04

li.

ệu trong hai bảng trên như sau: Xem tại trang 46 của tài liệu.
Thực hiện thêm vào bảng SALE - SQL Server _04

h.

ực hiện thêm vào bảng SALE Xem tại trang 47 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan