Xử lý lỗi trong SP:

Một phần của tài liệu Giáo trình lập trình SQL Server docx (Trang 38 - 40)

Để tăng hiệu năng của stored procedures, Bạn nên chứa mã trả về trạng thái thành công hay thất bại của thủ tục. Nếu thất bại thì thông báo về lỗi đã xảy ra.

Để kiểm tra lỗi bạn sử dụng hàm @@Error. Để trả về thông tin về lỗi bạn có thể sử dụng lệnh Return hoặc lệnh Raiserror.

1- Hàm @@ERROR

Hàm @@ERROR chứa mã lỗi cho phát biểu vừa thực hiện. Nó tự động xóa và đặt lại mã lỗi với mỗi phát biểu được thực hiện. Giá trị 0 nếu phát biểu thành công.

Bạn có thể dùng hàm @@ERROR để xác định mã lỗi hoặc làm điều kiện kết thúc thủ tục.

Ví dụ: Chèn Hoá đơn mới, nếu ngày lập là chủ nhật thì chuyển thành ngày thứ 2 CREATE PROC spThemHD ( @MaHD SmallInt, @NgayLap SmallDateTime )

As

If (IsDate(@NgayLap) = 0) Return 0

If DatePart(w, @NgayLap) = 1 Set @NgayLap = @NgayLap + 1

Insert Into HoaDon(MaHD, NgayLap) Values(@MaHD, @NgayLap) If (@Error <> 0)

Begin

RaiseError(‘Loi them hoa don moi’,10,1) Return 0

End

2- Lệnh RAISERROR

Phát biểu RAISERROR dùng xuất thông báo lỗi lấy từ table sysmessages hoặc một thông báo với nội dung nào đó

RAISERROR ( { msg_id | msg_str } { ,severity ,state } [ ,argument [ ,...n ] ] )

[ WITH option [ ,...n ] ]

Arguments

o msg_id: Mã số > 50000 của dòng thông báo do người dùng tạo trên table sysmessages

bằng thủ tục sp_AddMessage

o msg_str: Nội dung thông báo lỗi cần xuất. .

o severity: Mã số chỉ định mức độ nghiên trọng của lỗi.

Mức độ từ 0-19 được xem như là thông tin phản hồi. Mức từ 0 đến 16: lỗi phát sinh do dữ liệu. Mức 10 là lbáo cáo trạng thái. Mức từ 11 - 16 là những lỗi có thể được hiệu chỉnh bởi user.

Mức từ 20 - 25 chỉ định các lỗi tác hại từ ứng dụng không thể phục hồi. Nếu thông báo mức này, kết nối từ Client đến Server sẽ bị ngắt.

o State: là số nguyên từ 1 đến 127 biểu diễn thông tin về trạng thái thỉnh cầu của lỗi., nhằm chỉ rõ lỗi thuộc nhóm nào trong hệ thống lỗi. Giá trị phủ nhận của state là 1.

o Argument: Là tham số dùng thay thế vào những biến được sử dụng trong chuỗi msg_str

hoặc thông báo tương ứng với msg_id. Mỗi tham số thay thế có thể là 1 biến cục bộ hoặc giá trị thuộc kiểu: int1, int2, int4, char, varchar, binary, or varbinary.

RAISERROR ('The level for job_id:%d should be between %d and %d.', 16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)

o Option: có thể chứa các giá trị sau:

Value Description

LOG Ghi lỗi vào file nhật ký.

NOWAIT Gởi thông báo ngay lập tức đến client.

SETERROR Đặt giá trị msg_id hay 50000 cho hàm @@ERROR. Ví dụ: RAISERROR('Invalid member number', 10, 1) WITH LOG

Khi xuất hiện lỗi, mã lỗi được đặt trong hàm @@ERROR. Mặc định @@ERROR được đặt bằng 0 cho các lỗi có severity từ 1 đến 10.

3- Thêm Thông báo lỗi vào bảng sysmessages:

-a Dùng thủ tục sp_addmessage để thêm vào bảng sysmessages. .

sp_AddMessage @msgnum = msg_id ,

@severity = severity , @msgtext = 'msg'

[ , @lang = 'language' ]

[ , @with_log = 'True | False' ] [ , @replace = 'REPLACE' ]

msg_id: phải có giá trị từ 50.001 trở lên.

’REPLACE’: dùng chỉ định lệnh sẽ thay thế msg_id nếu msg_id đã có trong bảng.

Example: USE master

EXEC sp_addmessage @msgnum = 60000, @severity = 16,

@msgtext = ‘Kiểu dữ liệu không hợp lệ’ , @lang = 'us_english', @with_log = 'true'

-b Để xóa thống báo lỗi : sử dụng sp_dropmessage

sp_DropMessage@msgnum = msg_id

Chú thích – Comments

Có 2 cách chú thích: chú thích trên cùng dòng lệnh hoặc chú thích trên nhiều dòng.

Chú thích trên cùng dòng với một phát biểu - In-Line Comments

Sử dụng 2 dấu trừ (--) trước lời chú thích.

Chú thích trên nhiều dòng – Block Comments

Chương VI: Chuyển Tác Và Bẫy Lỗi

I- Các Phát Biểu Chuyển Tác – Transactions:-1 Khái niệm :

Một phần của tài liệu Giáo trình lập trình SQL Server docx (Trang 38 - 40)

Tải bản đầy đủ (DOC)

(55 trang)
w