Tôi tin rằng không có gì hiện có trong MySQL cho phép truy cập vào SQLSTATE của câu lệnh được thực thi cuối cùng trong một thủ tục lưu sẵn MySQL. Điều này có nghĩa là khi một SQLException chung được nâng lên trong một thủ tục lưu sẵn thì khó có thể lấy được bản chất của lỗi.Thủ tục lưu trữ MySQL Xử lý lỗi
Có ai có giải pháp cho việc phát sinh SQLSTATE của một lỗi trong một thủ tục lưu sẵn MySQL không liên quan đến việc khai báo một trình xử lý cho mọi SQLSTATE có thể không?
Ví dụ - hãy tưởng tượng rằng tôi đang cố gắng để trả lại một ERROR_STATUS mà đi vượt ra ngoài "SQLException xảy ra ở đâu đó trong BEGIN....END
khối này" generic trong những điều sau đây:
DELIMITER $$
CREATE PROCEDURE `myProcedure`(OUT o_error_status varchar(50))
MY_BLOCK: BEGIN
DECLARE EXIT handler for 1062 set o_error_status := "Duplicate entry in table";
DECLARE EXIT handler for 1048 set o_error_status := "Trying to populate a non-null column with null value";
-- declare handlers ad nauseum here....
DECLARE EXIT handler for sqlexception set o_error_status:= "Generic SQLException. You'll just have to figure out the SQLSTATE yourself...." ;
-- Procedure logic that might error to follow here...
END MY_BLOCK$$
Bất cứ lời khuyên?
PS Tôi đang chạy MySQL 5.1.49
Cảm ơn! Thực sự hữu ích. Tất cả những gì tôi phải làm bây giờ là nâng cấp lên 5.6 ;-) –