Thử bắt mysql

SQLServer Transact-SQL cung cấp cơ chế kiểm soát lỗi bằng cách TRY … CATCH as in the language setting the application current (Java, C, PHP). Bài viết này giới thiệu các vấn đề chung trong việc sử dụng TRY … CATCH cùng với hàm RAISEERROR để quản lý lỗi khi thiết lập trình SQL trên SQL Server

Ví dụ đơn giản về TRY … CATCH

Đầu tiên, hãy xem xét một ví dụ đơn giản phát sinh lỗi

Thử bắt mysql

Sau khi thực thi câu lệnh, ta thu được kết quả

Thử bắt mysql

Lỗi đọc thông tin hàm

Dưới đây là một số hàm cung cấp thông tin về lỗi vừa phát sinh

Thử bắt mysql

Sử dụng TRY … CATCH with TRANSACTION

Ta có thể sử dụng kết hợp TRY … CATCH with TRANSACTION block. Bên trong khối GIAO DỊCH, lệnh thao tác với dữ liệu được đặt trong khối TRY để khi có bất kỳ lỗi nào xảy ra, chương trình có thể bắt được và xử lý

Trước tiên, ta chuyển vào làm việc trong cơ sở dữ liệu tempdb

Thử bắt mysql

Sau khi thực hiện các lệnh trên, ta có kết quả bảng dữ liệu như sau

Thử bắt mysql

Use TRANSACTION to update a data series

Thử bắt mysql

Sau khi thực hiện xong, ta thử truy vấn lại bảng T1, kết quả truy vấn vẫn giống như trước khi thực hiện GIAO DỊCH (do TRANSACTION bị lỗi nên đã ROLLBACK toàn bộ)

Thử bắt mysql

Sử dụng TRY … CATCH with PROCEDURE

Trong ví dụ này, ta build Stored Procedure có sử dụng khối lệnh TRY … CATCH để bắt và xử lý lỗi. The 2 table A and B was started as after

Thử bắt mysql

Kết quả thực thi lệnh tạo bảng A

Thử bắt mysql

Lệnh tạo bảng B

Thử bắt mysql

Kết quả thực thi lệnh tạo bảng B

Thử bắt mysql

Create STORED PROCEDURE xóa bản ghi trong A as after

Thử bắt mysql

Use this STORED PROCEDURE to delete a writing of A

Thử bắt mysql

Error message as after

Thử bắt mysql

Để có thể bắt và xử lý lỗi này ngay bên trong STORED PROCEDURE, ta cần sử dụng khối lệnh TRY … CATCH … Chỉnh sửa STORED PROCEDURE hiện tại để bổ sung TRY … CATCH

Thử bắt mysql

Gọi thủ tục và bắt lỗi nếu có

Thử bắt mysql

Kết quả thực thi lệnh gọi thủ tục trên

Thử bắt mysql

Muốn hiểu giá trị của các thông số Msg. 547, Cấp độ. 16, Nhà nước. 0,… hãy đọc phần tiếp theo của bài viết RAISEERROR ở bên dưới

Sử dụng lệnh RAISEERROR để phát sinh lỗi

Bảng dữ liệu bảng lưu danh sách sinh viên với dữ liệu mẫu như sau

Thử bắt mysql

And a STORED PROCEDURE có tên insertStudent dùng để chèn thêm Student mới vào bảng

Thử bắt mysql

Khi chèn dữ liệu, ta nhận thấy rằng mã sinh viên (trường rollno) phải có đúng 7 ký tự, bên ngoài tên của sinh viên (tên đầy đủ của trường) không được để trống. Trong trường hợp người dùng nhập dữ liệu sai, ta cần phát thông báo lỗi để người dùng biết và nhập lại dữ liệu đúng. Khi đó, ta sử dụng câu lệnh RAISE ERROR như sau

Thử bắt mysql

Lưu ý giá trị SEVERITY phải lớn hơn 10 thì lệnh TRY … CATCH bên dưới mới bắt được lỗi

Thử bắt mysql

Khi đó, ta nhận được thông báo lỗi

Thử bắt mysql

Thông tin và cách sử dụng các tham số trong lời gọi RAISERROR tham khảo trong tài liệu MS SQLServer