Bài giảng Microsoft SQL server - Bài 12: Thủ tục lưu trú, hàm và trigger được biên soạn giúp người học nắm được về thủ tục lưu trú; hàm do người dùng định nghĩa, bẫy lỗi. Mời các bạn cùng tham khảo bài giảng để nắm chi tiết hơn nội dung nghiên cứu.
1 Mục tiêu: - Kỹ băng: - Viết thủ tục lưu trú để giải vấn đề đăt CSDL Bao gồm việc kiểm chứng liệu cần thiết - Viết hàm kiểu vô hướng dựa biểu thức công thức - Viết hàm kiểu bảng để thay cho câu lệnh SELECT có điều kiện WHERE - Viết trigger để ngăn chặn lỗi CSDL gây truy vấn hành động (Insert, Update, Delete) - Viết trigger ngăn chặn lỗi CSDL gây câu lệnh định nghĩa liệu (create, alter, v.v…) - Kiến thức: - Giải thích thủ tục thực nhanh SQL script tương ứng - Mô tả xử lý để kiểm chứng liệu thủ tục lưu trú - Mô tả ý nghĩa số thủ tục hệ thống - Mô tả hai kiểu hàm người dùng định nghĩa - Mô tả hai loại triggers - Giải thích ảnh hưởng mệnh đề WITH ENCRYPTION WITH CHEMABINDING thủ tục, hàm triger - Giải thích nên sử dụng câu lệnh ALTER xóa tạo lại thủ tục, hàm trigger - Chúng ta dùng T-SQL để viết chương trình có tính thủ tục scripts (tập lệnh/tệp lệnh), Store Procedures (Thủ tục lưu trú), User-defined functions (hàm người dùng định nghĩa) triggers (bẫy lỗi) - Các tệp lệnh hữu ích cho NSD truy cập SQL Server thông qua công cụ Client Management Studio Các công cụ Client thường dùng người lập trình SQL quản trị CSDL, khơng dùng chương trình ứng dụng hay NSD cuối - Store Procedures (Thủ tục lưu trú), User-defined functions (hàm người dùng định nghĩa) triggers (bẫy lỗi) đối tượng CSDL chứa câu lệnh SQL có khả thực thi server Các đối tượng điều khiển thực tốt tệp lệnh - Bảng slide so sánh khác chương trình có tính thủ tục SQL - Script: nhiều bó lệnh, lưu trữ ổ đĩa, thực cơng cụ phía client, khơng có tham biến - Store procedure (thủ tục lưu trú): bó lệnh, lưu trữ đối tượng CSDL, thực chương trình script, có tham biến - User- defined function (hàm người dùng định nghĩa): bó lệnh, lưu trữ đối tượng CSDL, thực chương trình script, có tham biến - Trigger: bó lệnh, lưu trữ đối tượng CSDL, tự động thực server truy vấn hành động thực hiện, khơng có tham biến - Thủ tục lưu trú sử dụng bởi: - Các lập trình viên SQL để điều khiển truy cập CSDL truy cập - Các lập trình viên ứng dụng để làm đơn giản hóa việc sử dụng CSDL họ - Hàm NSD định nghĩa: - Được sử dụng thường xuyên lập trình viên SQL thủ tục trigger mà họ viết - Cũng sử dụng lập trình viên ứng dụng NSD CSDL - Các trigger sử dụng bởi: - Các lập trình viên SQL để ngăn chặn lỗi CSDL truy vấn hành động thực - Các lập trình viên SQL để cung cấp view cập nhật liệu Ví dụ cách tạo thực thi thủ tục spInvoiceReport - Thủ tục spInvoiceReport có nhiệm vụ thực câu lệnh Select (như slide) Câu lệnh lọc hóa đơn cịn nợ tiền Thơng tin kết lấy từ hai bảng Invoices bảng Vendors Kết xếp theo chiều tăng dần VendorName - Sau viết script slide, chạy script để thủ tục spInvoiceReport tạo lưu trú CSDL AP (xem kết mục Programmability cửa sổ Object exprole) Chi tiết câu lệnh tạo thủ tục giới thiệu phần Để thực (chạy) thủ tục dùng câu lệnh EXEC Như slide, sau thực thủ tục spInvoiceReport thu kết bảng liệu hóa đơn chưa trả hết tiền (kết câu lệnh select thủ tục) Trong lần chạy đầu tiên, câu lệnh SQL thủ tục biên dịch thực thi để tạo kế hoạch thực thi (execution plan) Sau đó, thủ tục lưu trữ dạng thực thi CSDL lần chạy thủ tục sau câu lệnh SQL khơng cần phải biên dịch lại Do vậy, trình trình thực thi thủ tục lưu trú nhanh trình thực thi têp lệnh SQL tương đương Chúng ta thấy rằng, NSD hay chương trình gọi thủ tục spInvoiceReport không cần phải biết không cần biết cấu trúc CSDL sử dụng thủ tục không thiết phải biết câu lệnh SQL Đây cách để tăng tính bảo mật cho CSDL Cú pháp câu lệnh tạo thủ tục CREATE PROCE: - procedure_name: tên thủ tục tạo, tên đặt tùy ý theo nguyên tắc đặt tên SQL server, nhiên nên thêm hai kí tự „sp‟ vào phí trước tên để phân biệt với hàm - Parameter_declarations: khai báo tham biến (tùy chọn) - RECOMPILE: thủ tục biên dịch lại chạy - ENCRYPTION: thủ tục bị mã hóa khơng xem thủ tục sp_helptext - EXECUTE_AS_clause: - Sql_statements: tập hợp câu lệnh SQL sử dụng để giải nhiệm vụ thủ tục Phía bên slide ví dụ tạo thủ tục spCopyInvoices thực nhiệm vụ chép bảng liệu Invoices vào bảng InvoiceCopy câu lệnh Select…Into…From Hàm RAISERROR: Cú pháp: Raiserror(tbao_lỗi, mức_độ, trạng_thái [, các_tham_số]) Tbao_lỗi: là: Chuỗi thông báo lỗi Mã thông báo lỗi người dùng định nghĩa trước sp_addmessage lưu sys.messages Giá trị phải > 50000 Mức_độ: số có giá trị từ đến 25 thể mức độ nghiêm trọng lỗi Trạng_thái: số từ 1-127 để xác định vị trí lỗi sử dụng thông báo lỗi nhiều điểm khác Các_tham_số: hỗ trợ thông báo lỗi cần tham số 69 (Tiếp) Bó lệnh thứ ba script lệnh tạo trigger InvoiceCopy_INSERT _DELETE_RI: - Trigger gán bảng InvoiceCopy - Trigger kích hoạt có câu lệnh Insert Update thực bảng InvoiceCopy - Nhiệm vụ trigger: Kiểm tra không tồn giá trị VendorID cột VendorID bảng Vendors trùng với giá trị VendorID ghi chèn thêm (hoặc sửa) lưu bảng Inserted đưa thông báo lỗi „ Invalid VendorID‟ (mã VendorID không đúng) phục hồi lại (hủy bỏ) câu lệnh chèn thêm sửa câu lệnh ROLLBACK TRAN 70 Ví dụ thực câu lệnh xóa bảng VendorCopy kết 71 72 73 Ví dụ tạo View IBM_Invoices cập nhật liệu cho bảng Invoices thơng qua View 74 Ví dụ câu lệnh chèn thêm liệu vào bảng Invoices thông qua view IBM_Invoices kết thơng báo câu lệnh bị lỗi câu lệnh chèn ghi có giá trị cột VendorID = Null (vi phạm ràng buộc) 75 Ví dụ từ slide đến slide tiếp the tạo INSTEAD OF INSERT trigger cho view IBM_Invoice để xử lý tình thêm ghi thơng qua View có chứa giá trị Null INSTEAD OF INSERT trigger IBM_Invoice_Insert cung cấp giá trị cho cột nhận giá trị null dựa giải thiết - Thứ nhất, giá trị cột VendorID đốn (suy ra) view IBM_Invoice view xem cập nhật hóa đơn vendor IBM - Thứ 2, kì hạn tốn hóa đơn (term, 20 ngày, 30 ngày, …) đốn nhờ giá trị kì hạn mặc định Vendor - Thứ 3, ngày tới hạn hóa đơn tính gia từ thơng tin ngày lập hóa đơn kì hạn tốn hóa đơn Các câu lệnh slide bao gồm: khai báo biến sử dụng trigger IBM_Invoice_Insert gián giá trị cho biến @TestRowCount 76 Tiếp - Vì trigger hoạt động câu lệnh Insert ghi nên biên @TestRowCount > trigger đưa thống báo lỗi - Nếu @TestRowCount =1 trigger lấy giá trị 03 cột ghi dự định chèn vào bảng Invoices bảng Inserted Nếu giá trị 03 cột khác null trigger tính giá trị cho cột có giá trị null lệnh Insert từ cột 77 Vì INSTEAD OF trigger thực thay cho câu lệnh Insert nên định nghĩa trigger phải có câu lệnh Insert ghi vào bảng Invoices với giá trị lấy từ câu lệnh Insert qua view giá trị tính tốn cho cột có giá trị null Nếu khơng có câu lệnh Insert định gnhiax trigger câu lệnh Insert khơng thực 78 Trigger dùng để kiểm tra ràng buộc tham toàn vẹn liệu Ví dụ, tổng tiền bán bảng InvoiceLineItems đơn hàng phải tổng tiền tiền hóa đơn bảng Invoices Chúng ta khơng thể thiết lập ràng buộc cách định nghĩa ràng buộc thông thường biết Do cần phải xây dựng trigger để thực việc Trên slide hai slide ví dụ tạo trigger cập nhật Invoice_UPDATE mô tả cho trường hợp Trigger Invoices_UPDATE: - Trigger gắn với bảng Invoices - Trigger thực có câu lệnh Update xẩy bảng Invoice - Nhiệm vụ trigger: - Nếu tồn bảng liên kết Deleted Invoices ghi mà Deleted.PaymentTotal Invoices.PaymentTotal 79 - Nhiệm vụ trigger: - IF tồn bảng liên kết Deleted Invoices ghi mà Deleted.PaymentTotal Invoices.PaymentTotal (tiếp) IF tồn bảng liên kết Invoices LineItems (bảng tạm định nghĩa câu lệnh SELECT, gồm mã InvoiceID SumOfInvoices(tổng InvoiceLineItemAmount) hóa đơn) ghi có (Invoices.InvoiceTotal LineItems.SumOfInvoices) AND (LineItems.InvoiceID IN(SELECT InvoiceID FROM Deleted)) Thơng báo lỗi: sửa line item amount trước cơng bố thơng tin tốn Phục hồi câu lệnh Update Kết thúc IF Kết thúc IF 80 Ví dụ thực câu lệnh Update bảng Invoices kết tringger kích hoạt đưa thông báo 81 - Sử dụng lệnh DROP TRIGER để xóa trigger - Sử dụng lệnh ALTER TRIGGER để sửa triggrer - Chú ý: xóa trigger quyền bảo mật gán cho bị xóa theo 82 Ví dụ câu lệnh sửa xóa trigger 83 ... thích thủ tục thực nhanh SQL script tương ứng - Mô tả xử lý để kiểm chứng liệu thủ tục lưu trú - Mô tả ý nghĩa số thủ tục hệ thống - Mô tả hai kiểu hàm người dùng định nghĩa - Mô tả hai loại triggers... biến biến 14 15 - Thủ tục trả giá trị kiểu số nguyên Khi định nghĩa thủ tục có câu lệnh RETURN - Ví dụ tạo thủ tục spInvCount: - Thủ tục có hai tham trị tùy chọn - Nhiệm vụ thủ tục: đếm số hóa... chọn) - RECOMPILE: thủ tục biên dịch lại chạy - ENCRYPTION: thủ tục bị mã hóa khơng xem thủ tục sp_helptext - EXECUTE_AS_clause: - Sql_ statements: tập hợp câu lệnh SQL sử dụng để giải nhiệm vụ thủ