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

Bài 8 thủ tục (SP) và xử lý lỗi trong SP

21 1,5K 2

Đ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 21
Dung lượng 168,5 KB

Nội dung

1 Bài 8: Thủ tục (Stored Procedure) • Tìm hiểu về thủ tục trong SQL • Cú pháp tạo, sửa, xóa thủ tục • Ý nghĩa các tham số EXECUTE AS – CALLER – OWNER – SELF • Thiết lập thủ tục tự động – sp_procoption 1. Tìm hiểu về Stored Procedure (SP) • Khái niệm: Stored Procedure là một đối tượng trong SQL Server, gồm một nhóm câu lệnh Transact-SQL đã được compiled (biên dịch), được xử như một đơn vị • Bắt đầu được bổ sung từ SQL 2000 2 Ưu điểm của SP - Hiệu quả (Performance): SP được biên dịch (compile) lưu trữ ngay trong database server. Do đó: + Không cần kiểm tra quyền (permission) của các câu lệnh đơn lẻ. + Không cần kiểm tra lại cú pháp tạo kế hoạch thực thi + Giảm lưu lượng mạng: Không cần gửi nhiều câu lệnh SQL dài dòng, chỉ cần gửi tên SP nhận kết quả trả về. - Lập trình (Programming Framework) + Dễ bảo trì - Bảo mật (Security ) + Che dữ liệu của bảng + SP có thể được mã hóa (encrypt ) để tăng tính bảo mật 3 Nhược điểm • Stored procedure làm cho database server phải tốn nhiều tài nguyên về cả bộ nhớ lẫn xử lý. • Chỉ chứa các khai báo Sql, do đó khó viết một Sp nhằm thực hiện thao tác phức tạp như các ngôn ngữ khác: C#, Java, C++, … • Xử trong các cấu trúc lệnh chậm hơn so với các ngôn ngữ khác. • Khó Debug 4 Các loại Stored Procedure • System Stored Prcedure + Chứa trong master DB + SQL cung cấp hàng nghìn SP hệ thống. Chủ yếu dùng trong việc quản database (administration) security + Liệt kê các sp hệ thống trong CSDL master select * from sysobjects where xtype ='P' + Ví dụ thủ tục sp_addtype dùng để tạo kiểu dữ liệu mới. • Local Stored Procedure + Được viết bởi DBA hoặc Programmer + Lưu trong User Database 5 Các loại Stored Procedure • Temporary Stored Procedure + Được lưu trong TemDB + Sẽ bị xóa khi connection tạo ra chúng bị đóng hoặc SQL Server Shutdown • Extended Stored Procedure + Là một loại stored procedure của một chương trình ngoại vi (external program) có thể viết bởi C, C++, được biên dịch thành một DLL. + Lời gọi thủ tục này có cú pháp giống gọi SP của SQL + Thường bắt đầu bằng xp_ • Remote Stored Procedure + Là các stored procedure gọi stored procedure ở server khác. + Ví dụ: sp_who @loginame=’DomainNameAdministrators’ 6 7 Khai báo thủ tục Cú pháp: CREATE PROC[EDURE] [schema.]procedure_name [ {@parameter data_type} [= default] [OUTPUT] ] [, n] [WITH {RECOMPILE | ENCRYPTION | EXECUTE AS { CALLER|OWNER|SELF} }] AS sql_statement [ n] return [expression] EXECUTE AS CALLER: chỉ định là user muốn thực hiện thủ tục phải có quyền thực hiên trên thủ tục này, có các quyền tương ứng trên các objects trong thủ tục. 8 Thực thi thủ tục EXEC [ UTE ] {[@return_status=] {procedure_name[;number]|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]] [, n] [WITHRECOMPILE] } - Nếu sử dụng cách gọi @parameter = value, có thể để các tham số theo thứ tự bất kỳ - Nếu không sử dụng tên tham số, các giá trị sẽ được gán cho các tham số theo thứ tự. - Tham số nào không được truyền giá trị hoặc gán bằng DEFAULT, SP sẽ sử dụng giá trị mặc định trong khai báo tham số đó. - @return_status = giá trị trả về của SP. Nếu hàm không có giá trị trả về @return_status = 0 (Thủ tục thực thi không lỗi). Sử dụng tham số output - Nếu sử dụng từ khóa OUTPUT để khai báo tham số trong SP. Giá trị hiện tại của biến sẽ được lưu lại sau lời gọi thủ tục. - Khi gọi SP cũng phải sử dụng từ khóa OUTPUT với các biến được khai báo dạng này. 9 10 VD: Tìm số lớn nhất trong 3 số a,b,c Use Test CREATE PROCEDURE dbo.MaxABC @a real=1, @b real=9, @c real=10, @max real output as set @max=@a if @max <@b set @max=@b if @max <@c set @max=@c return @max GO declare @max real,@return_status real exec @return_status = dbo.maxabc 100, default, default, @max output print @max print @return_status [...]... NguoiNhap, GhiChu, MaSP, TenSP, Soluong,DonGia) 18 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) 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ì ta chèn MaSP TenSP vào bảng này - Chèn... MaSP, SoLuong, DonGia lấy được từ xâu vào bảng NhapHangHoa 19 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) 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) thì ta chèn MaSP và. . .Thủ tục đệ qui Create proc gt @n int,@m int output as if @i>1 Begin exec @m=gt @n - 1,@m output set @m = @n*@m End else set @m=1 declare @gt1 int exec gt 4,1, @gt1 output print @gt1 11 Một số ví dụ Vd1: Viết thủ tục chèn một bản ghi vào bảng (bảng có/ không có trường identity) - Hàm @@IDENTITY Vd2: Viết thủ tục liệt kê k mặt hàng có doanh thu lớn nhất của mỗi loại hàng trong một khoảng... AS OWNER – EXECUTE AS SELF • Xem kịch bản trong lecture4-Procedure.doc (Phân biệt các tham số Execute as ) 15 Thiết lập một thủ tục tự động chạy Có thể thiết lập để một thủ tục có thể tự động chạy khi mà chúng ta khởi động dịch vụ sqlserver: sp_ procoption [ @ProcName = ] 'procedure' , [ @OptionName = ] 'option' , [ @OptionValue = ] 'value' 16 Thiết lập một thủ tục tự động chạy (2) use master go CREATE... Viết thủ tục phân trang các bản ghi 12 Thủ tục phân trang các bản ghi CREATE PROCEDURE sp_ PagedItems ( @Page int, @RecsPerPage int) AS CREATE TABLE #TempItems (ID int IDENTITY, Name varchar(50), Price money) INSERT INTO #TempItems (Name, Price) SELECT Name, listPrice FROM Adventureworks.Production.Product ORDER BY listPrice DECLARE @FirstRec int, @LastRec int SET @FirstRec = (@Page - 1) * @RecsPerPage... exec sp_ procoption N'StartUpProcAudit', N'startup', N'true' 17 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 lấy ra các hóa đơn sau đó Insert vào bảng... 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ì ta chèn MaSP TenSP vào bảng này - Nếu MaHD chưa có trong bảng NhapHangHoa thì chèn giá trị MaHD, NguoiNhap, GhiChu vào bảng này - Chèn các giá trị MaHD,MaSP,SoLuong,DonGia vào bảng NhapHangHoaChiTiet 20 So sánh hiệu năng vòng while • declare @d1 decimal, @d2 decimal, @d3 decimal, @i int • set @i... DECLARE @FirstRec int, @LastRec int SET @FirstRec = (@Page - 1) * @RecsPerPage +1 SET @LastRec = (@Page * @RecsPerPage ) SELECT *, MoreRecords =( SELECT COUNT(*) FROM #TempItems TI WHERE TI.ID > @LastRec) FROM #TempItems WHERE ID >= @FirstRec AND ID . 1 Bài 8: Thủ tục (Stored Procedure) • Tìm hiểu về thủ tục trong SQL • Cú pháp tạo, sửa, xóa thủ tục • Ý nghĩa các tham số EXECUTE AS – CALLER – OWNER – SELF • Thiết lập thủ tục tự động – sp_ procoption 1 chỉ định là user muốn thực hiện thủ tục phải có quyền thực hiên trên thủ tục này, và có các quyền tương ứng trên các objects trong thủ tục. 8 Thực thi thủ tục EXEC [ UTE ] {[@return_status=] {procedure_name[;number]|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]] [,. MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này. - Chèn các giá trị MaHD, NguoiNhap, GhiChu, MaSP, SoLuong, DonGia lấy được từ xâu vào bảng NhapHangHoa. 20 Bài

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

w