Server IP : 185.86.78.101 / Your IP : 216.73.216.213 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/server/mysql/mysql-test/r/ |
Upload File : |
drop database if exists demo; create database demo; use demo; create procedure proc_top_a(p1 integer) begin ## DECLARE CONTINUE HANDLER for SQLEXCEPTION, NOT FOUND begin end; select "Starting ..."; call proc_middle_a(p1); select "The end"; end $$ create procedure proc_middle_a(p1 integer) begin DECLARE l integer; # without RESIGNAL: # Should be: DECLARE EXIT HANDLER for SQLEXCEPTION, NOT FOUND DECLARE EXIT HANDLER for 1 /* not sure how to handle exceptions */ begin select "Oops ... now what ?"; end; select "In prod_middle()"; create temporary table t1(a integer, b integer); select GET_LOCK("user_mutex", 10) into l; insert into t1 set a = p1, b = p1; call proc_bottom_a(p1); select RELEASE_LOCK("user_mutex") into l; drop temporary table t1; end $$ create procedure proc_bottom_a(p1 integer) begin select "In proc_bottom()"; if (p1 = 1) then begin select "Doing something that works ..."; select * from t1; end; end if; if (p1 = 2) then begin select "Doing something that fail (simulate an error) ..."; drop table no_such_table; end; end if; if (p1 = 3) then begin select "Doing something that *SHOULD* works ..."; select * from t1; end; end if; end $$ call proc_top_a(1); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that works ... Doing something that works ... a b 1 1 The end The end call proc_top_a(2); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that fail (simulate an error) ... Doing something that fail (simulate an error) ... ERROR 42S02: Unknown table 'demo.no_such_table' call proc_top_a(3); Starting ... Starting ... In prod_middle() In prod_middle() ERROR 42S01: Table 't1' already exists call proc_top_a(1); Starting ... Starting ... In prod_middle() In prod_middle() ERROR 42S01: Table 't1' already exists drop temporary table if exists t1; create procedure proc_top_b(p1 integer) begin select "Starting ..."; call proc_middle_b(p1); select "The end"; end $$ create procedure proc_middle_b(p1 integer) begin DECLARE l integer; DECLARE EXIT HANDLER for SQLEXCEPTION, NOT FOUND begin begin DECLARE CONTINUE HANDLER for SQLEXCEPTION, NOT FOUND begin /* Ignore errors from the cleanup code */ end; select "Doing cleanup !"; select RELEASE_LOCK("user_mutex") into l; drop temporary table t1; end; RESIGNAL; end; select "In prod_middle()"; create temporary table t1(a integer, b integer); select GET_LOCK("user_mutex", 10) into l; insert into t1 set a = p1, b = p1; call proc_bottom_b(p1); select RELEASE_LOCK("user_mutex") into l; drop temporary table t1; end $$ create procedure proc_bottom_b(p1 integer) begin select "In proc_bottom()"; if (p1 = 1) then begin select "Doing something that works ..."; select * from t1; end; end if; if (p1 = 2) then begin select "Doing something that fail (simulate an error) ..."; drop table no_such_table; end; end if; if (p1 = 3) then begin select "Doing something that *SHOULD* works ..."; select * from t1; end; end if; end $$ call proc_top_b(1); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that works ... Doing something that works ... a b 1 1 The end The end call proc_top_b(2); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that fail (simulate an error) ... Doing something that fail (simulate an error) ... Doing cleanup ! Doing cleanup ! ERROR 42S02: Unknown table 'demo.no_such_table' call proc_top_b(3); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that *SHOULD* works ... Doing something that *SHOULD* works ... a b 3 3 The end The end call proc_top_b(1); Starting ... Starting ... In prod_middle() In prod_middle() In proc_bottom() In proc_bottom() Doing something that works ... Doing something that works ... a b 1 1 The end The end drop database demo;