Mục lục:
- Các khai báo của trình xử lý
- Ví dụ này không thực tế, bởi vì thông thường câu lệnh SQL có thể gây ra điều kiện xảy ra - cũng như trình xử lý sẽ được triệu gọi nếu điều kiện đã xảy ra - cũng sẽ được bao gồm trong cấu trúc BEGIN … END.
Video: Học Excel online 67 | Hướng dẫn lọc dữ liệu trong EXCEL theo Database bằng SQL 2025
Bạn có thể có chương trình của bạn xem SQLSTATE sau khi thực hiện của mỗi câu lệnh SQL. Có nhiều khả năng cho những gì bạn có thể muốn làm tiếp theo. Bạn làm gì với kiến thức mà bạn đạt được?
-
Nếu bạn tìm thấy mã lớp 00 , bạn có thể không muốn làm bất cứ điều gì. Bạn muốn thực hiện theo đúng kế hoạch ban đầu của mình.
-
Nếu bạn tìm thấy mã lớp 01 hoặc 02 , bạn có thể muốn thực hiện hành động đặc biệt. Nếu bạn mong đợi chỉ dẫn "Cảnh báo" hoặc "Không tìm thấy", có lẽ bạn muốn để quá trình thực hiện tiếp tục. Nếu bạn không mong đợi một trong các mã lớp này, bạn có thể muốn có chi nhánh triển khai thực hiện một thủ tục được thiết kế đặc biệt để xử lý sự cố bất ngờ, nhưng không hoàn toàn không báo trước, hoặc không tìm thấy kết quả.
-
Nếu bạn nhận được bất kỳ mã lớp khác, cái gì là sai. Bạn nên đi đến một quy trình xử lý ngoại lệ. Thủ tục nào bạn chọn để chi nhánh phụ thuộc vào nội dung của ba nhân vật phụ cũng như hai nhân vật lớp của SQLSTATE. Nếu nhiều trường hợp ngoại lệ khác nhau có thể, có thể có một thủ tục xử lý ngoại lệ cho mỗi một vì các ngoại lệ khác nhau thường đòi hỏi phản ứng khác nhau.
Bạn có thể sửa lỗi hoặc tìm cách giải quyết. Các lỗi khác có thể gây tử vong; không ai sẽ chết, nhưng bạn có thể sẽ phải chấm dứt đơn.
Các khai báo của trình xử lý
Bạn có thể đặt trình xử lý điều kiện trong một câu lệnh ghép. Để tạo một trình xử lý điều kiện, trước tiên bạn phải khai báo điều kiện mà nó sẽ xử lý. Điều kiện tuyên bố có thể là một ngoại lệ, hoặc nó chỉ có thể là cái gì đó là sự thật. Đây là một số điều kiện có thể xảy ra.
SQLSTATE class 02
Sau đây là ví dụ về khai báo điều kiện:
BEGIN DECLARE constraint_violation ĐIỀU KIỆN CHO SQLSTATE VALUE '23000'; KẾT THÚC;
Ví dụ này không thực tế, bởi vì thông thường câu lệnh SQL có thể gây ra điều kiện xảy ra - cũng như trình xử lý sẽ được triệu gọi nếu điều kiện đã xảy ra - cũng sẽ được bao gồm trong cấu trúc BEGIN … END.
Các thao tác xử lý và các hiệu ứng xử lý
-
Nếu xảy ra tình huống gây ra trình xử lý, hành động được chỉ định bởi trình xử lý sẽ thực hiện. Hành động này là một câu lệnh SQL, có thể là một câu lệnh ghép. Nếu hành động xử lý hoàn tất thành công, thì hiệu lực trình xử lý sẽ được thực thi.Dưới đây là danh sách 3 hiệu ứng xử lý có thể:
CONTINUE: Tiếp tục thực hiện ngay sau câu lệnh gây ra trình xử lý được gọi. -
-
THOÁT: Tiếp tục thực hiện sau câu lệnh hợp chất có chứa trình xử lý.
UNDO: Hoàn tác công việc của các báo cáo trước trong câu lệnh hợp chất và sau đó tiếp tục thực thi sau câu lệnh có chứa trình xử lý.
Nếu trình xử lý có thể sửa bất cứ vấn đề nào được gọi ra trình xử lý, thì hiệu ứng CONTINUE có thể là thích hợp. Hiệu ứng EXIT có thể thích hợp nếu trình xử lý không giải quyết được vấn đề, nhưng những thay đổi được thực hiện đối với câu lệnh hợp chất không cần phải hoàn tác. Tác động của UNDO là thích hợp nếu bạn muốn trả lại cơ sở dữ liệu cho trạng thái mà nó đã có trước khi câu lệnh hợp nhất bắt đầu thực hiện.
Xem xét ví dụ sau:
BEGIN ATOMIC DECLARE constraint_violation ĐIỀU KIỆN CHO SQLSTATE VALUE '23000'; KẾT QUẢ X UND LÝ NGƯỜI X LÝ REPLACE INTO sinh viên (StudentID, Fname, Lname) GIÁ TRỊ (: sid,: sfname,: slname); REPLACE INTO danh sách (ClassID, Class, StudentID) GIÁ TRỊ (: cid,: cname,: sid); KẾT THÚC;
Nếu một trong hai câu lệnh INSERT gây ra một sự vi phạm ràng buộc, chẳng hạn như cố gắng thêm một bản ghi với một khoá chính mà sao chép một khóa chính đã có trong bảng, SQLSTATE giả định một giá trị '23000', do đó thiết lập điều kiện constraint_violation một giá trị đích thực.
Hành động này làm cho trình xử lý để UNDO bất kỳ thay đổi đã được thực hiện cho bất kỳ bảng bằng lệnh INSERT. Câu lệnh RESIGNAL chuyển quyền kiểm soát sang thủ tục gọi là thủ tục đang thực hiện.
Nếu cả hai câu lệnh INSERT thực thi thành công, thao tác sẽ tiếp tục với câu lệnh sau từ khoá END.
Từ khóa ATOMIC là bắt buộc bất cứ khi nào hiệu quả của người điều khiển là UNDO. Đây không phải là trường hợp đối với người xử lý có hiệu lực là hoặc TIẾP TỤC hoặc XUẤT.