Bài giảng SQL Server 2005 - Chương VII: Stored Procedure - Phạm Mạnh Cương
I- Khái niệm:
• Là một chương trình con được xây dựng bởi những phát biểu của T-SQL
• Có tham số Input và Output
• Được lưu trữ trong CSDL với 1 tên phân biệt.
• Cho phép gọi thực hiện từ các ngôn ngữ lập trình khác.
• Stored Procedure thường dùng thực hiện truy vấn hay cập nhật dữ liệu theo yêu cầu của người dùng.
Bạn đang xem tài liệu "Bài giảng SQL Server 2005 - Chương VII: Stored Procedure - Phạm Mạnh Cương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng SQL Server 2005 - Chương VII: Stored Procedure - Phạm Mạnh Cương
CHƯƠNG VII STORED PROCEDURE Giảng viên : Phạm Mạnh Cương 1 I- Khái niệm : 2 • Là một chương tr ì nh con được xây dựng bởi những phát biểu của T-SQL • Có tham số Input và Output • Được lưu trữ trong CSDL với 1 tên phân biệt . • Cho phép gọi thực hiện từ các ngôn ngữ lập trình khác . • Stored Procedure thường dùng thực hiện truy vấn hay cập nhật dữ liệu theo yêu cầu của người dùng. II- Tạo Stored Procedure 3 1. Bằng Lệnh CREATE PROCEDURE 2. Bằng công cụ quản lý Management Studio 1- Bằng Lệnh CREATE PROCEDURE: 4 Create Proc [ ] [With Recompile | Encryption | Recompile , Encryption] As [Begin] [End] Ví dụ : Tạo thủ tục liệt kê sản phẩm tồn kho trong một tháng 5 Create Proc spTonKho(@Thang int = 8, @Nam int = 2005) As Begin Select * From TonKho Where Thang = @ Thang And Nam = @Nam End Ví dụ : Tạo thủ tục trả về Doanh thu của một năm 6 Create Proc spDTNam (@Nam Smallint , @ DoanhThu Float Output ) AS Begin Select @ DoanhThu = Sum(SL * DGBan ) From HoaDon hd Inner Join CTHD ct On hd.SoHD = ct.SoHD Where Year(NgayHD ) = @Nam End 1.1 Khai báo tham số hình thức của thủ tục : 7 Cú pháp : @ par_name datatype [= default ][OUTPUT ] [,n] Có 2 loại tham số hình thức : Input và Output. • Tham số Output dùng liên kết với một biến tại nơi gọi , nhận giá trị của biến và trả giá trị về cho biến . Ví dụ : Create Proc spTonKho (@Thang int = 8, @Nam int = 2005 ) Create Proc spDTNam (@Nam int , @ DoanhThu Float Output ) • Tham số h ì nh thức nhận giá trị mặc định khi không truyền giá trị cho nó . 1.2 Thực hiện Stored Procedures có Tham số 8 • Cách 1 Truyền theo vị trí : EXEC sp_name [OUTPUT] [, n ] Ví dụ gọi thủ tục : Create Proc spTonKho(@Thang int = 8, @Nam int = 2005) Exec spTonKho 9, 2005 Sử dụng giá trị default : Exec spTonKho 9 • Cách 2 Truyền theo tên : EXEC sp_name @ par_name = [OUTPUT][, n ] Ví dụ gọi thủ tục : Create Proc spTonKho(@Thang int = 8, @Nam int = 2005) Exec spTonKho @Nam = 2005, @ Thang = 8 Sử dụng giá trị default : Exec spTonKho @Nam = 2006 1.3 Nhận giá trị từ tham số Output 9 • Phải dùng Biến với từ khóa Output trong lời gọi để nhận giá trị từ tham số hình thức loại Output Create Proc spDTNam (@Nam int , @ DoanhThu Float Output ) Ví dụ : Thực hiện thủ tục spDTNam Declare @DT Float Exec spDTNam 2005, @DT Output Print @DT Hay Declare @DT Float Exec spDTNam @DoanhThu = @DT Output, @Nam = 2005 Print @DT III- Các Phát Biểu Điều Khiển : 10 1. Biến cục bộ 2. Phát biểu If .. Else 3. Phát biểu WHILE 4. Phát biểu : RETURN [ Biểu thức số nguyên ] 5. Phát biểu : GOTO 1- Biến cục bộ : 11 a) Khai báo biến cục bộ: DECLARE @VarName data _ type [,... n ] Ví dụ : Declare @n TinyInt , @m TinyInt , @y SmallInt • Biến cục bộ phải bắt đầu bằng k ý hiệu @ trước tên của nó. • Phạm vi biến : Biến chỉ khả dụng bên trong thủ tục , hàm hoặc một gói lệnh đ ã khai báo biến. • Giá trị ban đầu của biến là NULL b) Gán giá trị cho biến cục bộ : • Cách 1 : SET @ V arName = Ví dụ : Declare @ Ngay DateTime set @ Ngay ='2005/5/15' print @ Ngay • Cách 2 : SELECT @ V arName = [FROM ] – Nếu SELECT trả về nhiều d ò ng, th ì biến được gán giá tri từ d ò ng cuối cùng trả về bởi Select. Ví dụ : Tạo thủ tục liệt kê danh sách mặt hàng có đơn giá cao nhất và thấp nhất. 12 CREATE PROCEDURE spMatHangCaoNhatThapNhat AS Begin Declare @Dgmax float, @Dgmin float SELECT @Dgmax = Max(DonGia), @Dgmin = Min(DonGia) FROM MatHang SELECT * FROM MatHang WHERE DonGia = @Dgmax OR DonGia = @Dgmin ORDER BY DonGia DESC End 2- Phát biểu If .. Else: IF BEGIN END ELSE BEGIN END Create Proc spTonKho(@Thang int , @Nam int ) As If @ Thang 12 Begin Print ' Thang sai ' End Else Begin Select * From TonKho Where Thang = @ Thang And Nam = @Nam End 13 3- Phát biểu WHILE : 14 WHILE BEGIN [CONTINUE] [BREAK] END Ví dụ: Thủ tục tính tổng S = 1 + 3 + + (2N-1) Create Proc spTongLe ( @N int ) AS DECLARE @I int , @S int SET @I = 1 SET @S = 0 WHILE @I <= 2*@N -1 BEGIN Set @S = @S + @I Set @I = @I + 2 END Return @S 4- Phát biểu RETURN [ Biểu thức số nguyên ]: 15 Dùng kết thúc thủ tục và trả về nơi gọi một số nguyên • Mặc định là 0 nếu không chỉ định • Gọi hàm và nhận giá trị Return của thủ tục : EXEC @ var_name = sp_name [@ par_name =] [, n ] Ví dụ : Gọi thực hiện thủ tục spTongLe ( @N int ) declare @s int Exec @s = spTongLe 9 print 'Tong la = ' + Cast (@s As Varchar) Ví dụ: Thủ tục Thêm hóa đơn mới 16 Create Proc spThemHoaDon (@SoHD int , @ MaNV int , @ NgayHD DateTime ) As If Exists(Select * From HoaDon Where SoHD = @ SoHD ) Begin Print ' Trung so hoa don' Return 1 End If Not Exists(Select * From NhanVien Where MaNV = @ MaNV ) Begin Print 'Sai Ma nhan vien ' Return 2 End If @ NgayHD > GetDate () Begin Print ' Ngay lap hoa don lon hon ngay hien hanh ' Return 3 End Insert HoaDon (SoHD, MaNV, NgayHD) Values(@SoHD, @MaNV, @NgayHD) if @@Error 0 Begin Print ' Loi them hoa don moi ' Return 4 End Return 0 5- Phát biểu : GOTO 17 Create Proc spTongLe ( @N int ) AS DECLARE @I int, @S int SET @I = 1 SET @S = 0 Lap: IF (@I > 2*@N -1) GoTo KetQua Set @S = @S + @I Set @I = @I + 2 GoTo Lap KetQua: Return @S -- Thuc hien thu tuc Declare @KQ int Exec @KQ = spTongLe 9 Print @ kq IV- Sửa Xóa Thủ Tục : 18 1. Đổi Tên : sp_Rename , 2. Xóa Thủ tục được lưu: DROP PROC 3. Thay đổi nội dung thủ tục lưu trữ: ALTER PROC spName [ Danh sách tham số ] [With Recompile | Encryption | Recompile, Encryption] AS CẢM ƠN 19
File đính kèm:
- bai_giang_sql_server_2005_chuong_vii_stored_procedure_pham_m.ppt