DELIMITER $$USE `vgos0120`$$DROP PROCEDURE IF EXISTS `AddOuterNetUsers2`$$CREATE DEFINER=`root`@`%` PROCEDURE `AddOuterNetUsers2`(IN p_ecname VARCHAR(100),IN p_outerUserName VARCHAR(100), IN p_outerUserCode VARCHAR(50))
LABEL_PROC:
BEGIN
DECLARE v_eccode VARCHAR(50) DEFAULT '';
DECLARE v_grpid INT DEFAULT -100;
DECLARE v_cnt INT;
DECLARE v_errorinfo VARCHAR(500) DEFAULT '';
DECLARE EXIT HANDLER FOR SQLEXCEPTION LABEL_test;
SET v_errorinfo = CONCAT(p_ecname,';',p_outerUserName,';',p_outerUserCode,';');
SELECT COUNT(*) INTO v_cnt FROM qw_ecinfo a,grp_info b WHERE a.ecname=p_ecname AND a.eccode=b.grp_code;
CASE
WHEN v_cnt>1 THEN
INSERT INTO AddOuterNetUsers_log(tim,opi) VALUES (NOW(), CONCAT(v_errorinfo,':The EC name not only!Error'));
WHEN v_cnt=0 THEN
INSERT INTO AddOuterNetUsers_log(tim,opi) VALUES (NOW(), CONCAT(v_errorinfo,':EC unregistered!Error'));
ELSE
START TRANSACTION;-- 事务开始
INSERT INTO AddOuterNetUsers_log(tim,opi) VALUES (NOW(), CONCAT(v_errorinfo,':The user_code not only!Error'));
INSERT INTO user_info(media_mes,user_name) VALUES (1111,p_outerUserName);
INSERT INTO AddOuterNetUsers_log(tim,opi) VALUES (NOW(), v_errorinfo);
END CASE;
END LABEL_PROC$$;LABEL_test:
BEGIN
INSERT INTO t1(id,dt) VALUES (1,NOW());
END LABEL_test$$;DELIMITER ;这个存储过程编译报错。
在存储过程中能否实现 如果存储执行异常,然后跳转到LABEL_test标签,
就像 DECLARE EXIT HANDLER FOR SQLEXCEPTION LABEL_test;这样。
存储过程中如果执行异常,那么执行rollback,然后在错误日志表中记录一下,然后对输出参数赋值。
相当于存储过程中如果执行异常,可以执行一系列的操作。
我目前只能完成如果执行异常,那么就执行一步操作,要么rollback,要么错误日志表中记录一下,要么对输出参数赋值。反正只能做一步操作。
请帮忙。
我想实现的功能其实是
存储过程中如果执行异常,那么执行rollback,然后在错误日志表中记录一下,然后对输出参数赋值。
相当于存储过程中如果执行异常,可以执行一系列的操作。
我目前只能完成如果执行异常,那么就执行一步操作,要么rollback,要么错误日志表中记录一下,要么对输出参数赋值。反正只能做一步操作。
请帮忙。