1. 程式人生 > >Mysql 動態執行多條update語句,帶事務的

Mysql 動態執行多條update語句,帶事務的

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