1. Trang chủ
  2. » Công Nghệ Thông Tin

HỆ QUẢN TRỊ CSDL SQL SERVER chương 7 STORED PROCEDURE

28 609 0

Đ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 28
Dung lượng 151,69 KB

Nội dung

I- Khái niệm :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.. Create P

Trang 2

I- Khái niệm :

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

Trang 3

II- Tạo Stored Procedure

1 Bằng Lệnh CREATE PROCEDURE

2 Bằng công cụ quản lý Management Studio

Trang 5

Ví dụ: Tạo thủ tục liệt kê sản phẩm tồn kho

Select * From TonKho

Where Thang = @Thang And Nam = @Nam

End

Trang 7

1.1 Khai báo tham số hình thức của thủ tục:

1.1 Khai báo tham số hình thức của thủ tục:

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ó

Trang 8

1.2 Thực hiện Stored Procedures có Tham số

1.2 Thực hiện Stored Procedures có Tham số

Cách 1 Truyền theo vị trí :

EXEC sp_name <exp> [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 = <exp> [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

Trang 9

1.3 Nhận giá trị từ tham số Output

1.3 Nhận giá trị từ tham số Output

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 )

Trang 10

III- Các Phát Biểu Điều Khiển:

III- Các Phát Biểu Điều Khiển:

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 <label>

6 Phát biểu : Exec (@string_var | [N]'string_expression')

Trang 11

1- Biến cục bộ :

1- Biến cục bộ :

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 @VarName = <Expression>

Ví dụ: Declare @Ngay DateTime

set @Ngay ='2005/5/15' print @Ngay

Cách 2: SELECT @VarName = <Expression> [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.

Trang 12

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.

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.

AS

Begin

Declare @Dgmax float, @Dgmin float

FROM MatHang

SELECT * FROM MatHang

WHERE DonGia = @Dgmax OR DonGia = @Dgmin

ORDER BY DonGia DESC

End

Trang 13

Print 'Thang sai' End

Else Begin

Select * From TonKho

Where Thang = @Thang

And Nam = @Nam End

Trang 14

Ví dụ: Tạo thủ tục truy vấn tồn kho theo tháng và năm.

Ví dụ: Tạo thủ tục truy vấn tồn kho theo tháng và năm.

Set @m = Left(@TN, @i-1 ) Set @y = Right(@TN, Len(@TN)- @i)

If (@m <1 Or @m >12) Begin

Print 'Thang Sai' Return 2

End SELECT * FROM TonKho

WHERE Thang = @m

And Nam = @y Return 0

Create Proc spTonKho (@TN

Trang 15

Set @S = @S + @I Set @I = @I + 2 END

Trang 16

4- Phát biểu RETURN [Biểu thức số nguyên]:

4- Phát biểu RETURN [Biểu thức số nguyên]:

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 =] <exp>[,…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)

Trang 17

Ví dụ: Thủ tục Thêm hóa đơn mới

Ví dụ: Thủ tục Thêm hóa đơn mới

Create Proc spThemHoaDon(@SoHD int, @MaNV int, @NgayHD DateTime) As

If Exists(Select * From HoaDon Where SoHD = @SoHD)

Trang 18

5- Phát biểu: GOTO <label>

5- Phát biểu: GOTO <label>

Thuc hien thu tuc Declare @KQ int Exec @KQ = spTongLe 9 Print @kq

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

Trang 19

6-Phát biểu :

Exec(@string_var | [N]'string_expression')

6-Phát biểu :

Exec(@string_var | [N]'string_expression')

Dùng thực hiện phát biểu T-SQL lưu trong biến chuỗi hoặc

được tạo bởi một biểu thức chuỗi

Ví dụ: Tạo thủ tục truy vấn một Table, với tên table là tham số Input

Create Proc spMoBang (@TenBang VarChar(30))

Ví dụ: Tạo thủ tục liệt kê N mặt hàng có đơn giá thấp nhất hay cao nhất;

chọn thêm hay không chọn thêm các mặt hàng khác có cùng đơn giá

với mặt hàng thứ N

Có 3 tham số Input: số nguyên dương N, và 2 cờ hiệu 0 hay 1 cho biết

chọn đơn giá thấp nhất hay cao nhất; chọn thêm hay không chọn thêm.

Trang 20

IV- Giao Tác (Transaction)

Transaction là một gói lệnh dùng đảm bảo các lệnh cập nhật

dữ liệu trong gói đều được xử lý một cách trọn vẹn

Nếu có một lệnh nào đó trong Transaction bị lỗi thì sẽ tự động bãi bỏ các lệnh trong Transaction và phục hồi lại toàn

bộ dữ liệu đã bị thay đổi bởi các lệnh trong Transaction.

Trang 21

1- Các phát biểu đóng gói một Transaction

1- Các phát biểu đóng gói một Transaction

a) Bắt đầu Transaction:

BEGIN TRAN [SACTION] [transaction_name]

Nên đặt tên giao tác khi trong giao tác có lồng giao tác

khác

b) Kết thúc Transaction:

Không phục hồi dữ liệu đã thay đổi:

Phục hồi dữ liệu đã thay đổi trong Transaction:

Trang 22

Nếu lệnh chèn bị lỗi thì kết thúc giao tác, trả về giá trị 1

Ngược lại thì giảm số tồn của mặt hàng đã ghi trong chi tiết hóa đơn đó.

Nếu sau khi giảm mà số tồn < 0 thì bãi bỏ lệnh chèn chi tiết hóa đơn và

phục hồi lại số tồn đã thay đổi.

Trang 23

2- Phân đoạn nhóm lệnh trong Transaction:

2- Phân đoạn nhóm lệnh trong Transaction:

Được sử dụng khi muốn phân chia nhóm lệnh cần bãi bỏ

trong Transaction

Đánh dấu đầu phân đoạn:

SAVE TRAN <save_name>

Kết thúc Transaction và phục hồi dữ liệu đã thay đổi bởi

nhóm lệnh:

ROLLBACK TRAN <save_name>

Trang 24

Ví dụ:

Ví dụ:

Xây dựng thủ tục dùng:

Thêm một hóa đơn mới gồm số hóa đơn, ngày lập, mã số nhân viên lập

hóa đơn và một chi tiết của hóa đơn đó gồm mã hàng, số lượng, đơn

giá bán.

Nếu lệnh thêm hóa đơn bị lỗi thì kết thúc giao tác và trả về giá trị 1

Ngược lại thì thêm chi tiết hóa đơn vào table CTHD đồng thời giảm số

tồn của mặt hàng

Nếu lệnh thêm chi tiết hóa đơn bị lỗi thì kết thúc giao tác và chỉ bỏ lệnh

chèn chi tiết hóa đơn và trả về giá trị lỗi là 2

Nếu sau khi giảm mà số tồn < 0 thì chỉ bỏ lệnh chèn chi tiết hóa đơn và

phục hồi lại số tồn đã thay đổi.

Trang 25

V- Kiểm soát lỗi thực hiện:

V- Kiểm soát lỗi thực hiện:

Cú pháp:

BEGIN TRY

<các lệnh cần kiểm tra lỗi thực hiện>

END TRYBEGIN CATCH

<các lệnh xử lý khi có lỗi trong khối TRY>

Trang 26

Ví dụ sử dung Try Catch

Ví dụ sử dung Try Catch

Xây dựng thủ tục dùng thêm một hóa đơn mới gồm số hóa đơn, ngày lập,

mã số nhân viên lập hóa đơn và một chi tiết của hóa đơn đó gồm mã

hàng, số lượng, đơn giá bán.

Nếu một trong 2 lệnh chèn bị lỗi thì hủy bỏ cả 2, trả về mã lỗi và thông báo lỗi.

Trang 27

VI- Sửa Xóa Thủ Tục:

VI- Sửa Xóa Thủ Tục:

1 Đổi Tên TTLT:

sp_Rename <OldName>, <NewName>

2 Xóa Thủ tục được lưu:

DROP PROC <spName>

3 Thay đổi nội dung thủ tục lưu trữ:

[Danh sách tham số]

[ With Recompile | Encryption | Recompile , Encryption ]

AS

< Các phát biểu t_sql >

Trang 28

VII- XEM THÔNG TIN THỦ TỤC:

VII- XEM THÔNG TIN THỦ TỤC:

1 Table Sys.Procedures : chứa các thủ tục trong CSDL hiện

hành

Select * From Sys.Procedures

2 Table Sys Parameters : chứa các tham số của thủ tục

Select * From Sys.Parameters

Where Object_ID= Object_ID ('spTonKho‘)

3 Xem nội dung thủ tục: SP_HELPTEXT ‘spName’

Ví dụ:

IF EXISTS ( SELECT * FROM Sys.Procudures

Ngày đăng: 03/12/2015, 15:38

TỪ KHÓA LIÊN QUAN

w