2012-10-26 21 views
17

Tôi dường như không thể tìm thấy bất kỳ nơi nào để bắt và phát lại bất kỳ lỗi hoặc cảnh báo nào có thể xảy ra trong quy trình.Cách bắt và phát lại tất cả các lỗi trong MySQL

Những gì tôi muốn là cú pháp để làm như sau:

create procedure myProcedure() 
    begin 

     declare exit handler for ANYTHING_WRONG_THAT_CAN_BE_CAUGHT_WARNINGS_INCLUDED 
     begin 
      rollback; 
      RE_THROW THE_THING_THAT_WAS_CAUGHT; 
     end; 

     start transaction; 
     -- do some stuff 
     commit; 
    end; // 

Lý do được rằng tôi muốn buộc một rollback về lỗi hoặc cảnh báo nhưng để lại nó lên đến khách hàng để quyết định làm gì với lỗi cụ thể.

Các khu vực toàn bộ mũ là các phần mà tôi không biết phải đặt gì.

Cảm ơn bạn đã trợ giúp!

Sửa -------

Tôi đã kể từ khi học thì không thể làm những gì tôi đã yêu cầu:. '(

Thay vào đó tôi có một lỗi duy nhất cho bất cứ điều gì mà đi sai và sử dụng đoạn mã sau:

declare exit handler for sqlwarning, sqlexception begin 
    rollback; 
    call error(); 
end; 

(lỗi() không tồn tại)

+0

Câu hỏi này sẽ cung cấp một giải pháp một phần: http://stackoverflow.com/questions/18858567/mysql-exception-handler-access-excep tion-being-handling – djechlin

+1

tại sao 'một phần'? cái gì còn thiếu? – rsanchez

Trả lời

18

Để bắt tất cả các trường hợp ngoại lệ SQL, sử dụng:

01.
DECLARE EXIT HANDLER FOR SQLEXCEPTION 

SQLWARNINGS cũng có thể được sử dụng để nhận cảnh báo.

Bên trong xử lý ngoại lệ, nhằm nâng cao các lỗi hoặc cảnh báo vừa được bắt, sử dụng:

RESIGNAL 

Xem tài liệu cho báo cáo kết quả RESIGNAL:

http://dev.mysql.com/doc/refman/5.5/en/resignal.html

này có sẵn từ MySQL 5.5

+1

Đây chính xác là những gì tôi đang tìm kiếm. Hoạt động như mong đợi! Cảm ơn bạn! –

Các vấn đề liên quan