php - MySQL rollback in handler -
i have stored procedure i'd rollback in case goes wrong. in order i'm using exit handler this:
declare exit handler sqlexception begin rollback; end; but in way, when call stored procedure, in case of errors, stored procedure succeed , don't know actual problem. want client (php) log error in order troubleshoot it. modify in way:
declare exit handler sqlexception begin diagnostics condition 1 @p1 = message_text; rollback; signal sqlstate '45000' set message_text = @p1; end; so stored procedure rollback , throw exeption handler intercepted. that's cool message_text more 128 chars , in such cases get:
error code: 1648. data long condition item 'message_text'
of course solution not acceptable:
declare exit handler sqlexception begin diagnostics condition 1 @p1 = message_text; rollback; set @p1=substring(@p1,1,128); signal sqlstate '45000' set message_text = @p1; end; is there way intercept exception, rollback , throw same exception client? help
i use template , works me. when exceptions encountered, transaction flow jumps declare exit handler sqlexception. last statement executed mysql engine rollback. after that, transaction flow moves out of tblock
handle exceptions gracefully returning error codes , message recordset (not throwing error php), php code can manipulate , display.
delimiter $$ create procedure `procname`( <parameters here> ) begin start transaction; tblock: begin # start: transaction block /* catch exceptions, rollback */ declare exit handler sqlexception begin diagnostics condition 1 @state = returned_sqlstate, @rtc = mysql_errno, @rmg = message_text; -- mysql 5.6 > : comment diagnostics lower versions rollback; end; /* table transactions here */ commit; end tblock; # end: transaction block select @rtc retcode, @rmg retmsg, 'some ret value' retval; end$$ delimiter ; in sql, standard, 0 success , non-zero (usually greater zero) values suggest error. may want follow such , make practice.
Comments
Post a Comment