Mysql 动态执行多条update语句,带事务的

本文介绍了一个存储过程,用于批量执行SQL语句并处理事务。该过程接收多条SQL语句和分隔符作为输入参数,并逐条执行这些SQL语句。在执行过程中,如果遇到SQL异常或警告,则会回滚事务并返回相应的错误代码和消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create procedure  P_CallSql_Tran(IN vi_sql text,in vi_splitchar varchar(20),OUT vo_code VARCHAR(20),out vo_msg text)

BEGIN

DECLARE v_sqltemp text;
DECLARE v_singleSql text;
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN
 ROLLBACK;
 SET vo_code='500';
 SET vo_msg='操作失败!';
END;


DECLARE EXIT HANDLER FOR SQLWARNING 
BEGIN
 ROLLBACK;
 SET vo_code='501';
 SET vo_msg='数据格式错误,请检查sql语句的正确性!!!';
END;


SET v_sqltemp=vi_sql;
SET v_singleSql='';
SET AUTOCOMMIT=1;
START TRANSACTION;
WHILE LENGTH(v_sqltemp)>0 DO
  SET v_singleSql=substring_index(v_sqltemp,vi_splitchar,1);
  SET @sqlStr=concat(v_singleSql,';');
PREPARE stmts FROM @sqlStr;
EXECUTE stmts;
  SET v_sqltemp=REPLACE(v_sqltemp,concat(substring_index(v_sqltemp,vi_splitchar,1),vi_splitchar),'');
END WHILE;
 COMMIT;
 SET vo_code='000';
 SET vo_msg='操作成功!';
END
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值