maridb存储过程 带事务 sql拼接

DELIMITER D R O P P R O C E D U R E I F E X I S T S ‘ u p d a t e e m p i d ‘ DROP PROCEDURE IF EXISTS `update_empid` DROPPROCEDUREIFEXISTSupdateempid
CREATE PROCEDURE update_empid(
in peid varchar(20),
in old_empid varchar(20),
in new_empid varchar(20),
in option_user varchar(20),
out updaterow int)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
DECLARE tmp_update_row int default 0;
DECLARE tmp_table_name varchar(20);
DECLARE tmp_peid_column varchar(20);
DECLARE tmp_empid_column varchar(20);

DECLARE s INT DEFAULT 0;

DECLARE t_error INTEGER DEFAULT 1;
BEGIN
DECLARE cursor_changeTable CURSOR
FOR
select table_name,peid_column,empid_column from change_empid_table;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET s=1;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=0;
START TRANSACTION;

OPEN cursor_changeTable;
FETCH cursor_changeTable INTO tmp_table_name,tmp_peid_column,tmp_empid_column;
WHILE s<>1 DO
SET @sqlTmp=CONCAT(‘update ‘,tmp_table_name,’ set ',tmp_empid_column,' = ‘’’,new_empid,’’’ where ',tmp_peid_column,' = ‘’’,peid,’’’ and ',tmp_empid_column,' = ‘’’,old_empid, ‘’’’);
PREPARE stmt FROM @sqlTmp;
EXECUTE stmt;
deallocate prepare stmt;
set tmp_update_row =tmp_update_row +1;
FETCH NEXT FROM cursor_changeTable INTO tmp_table_name,tmp_peid_column,tmp_empid_column;
END WHILE;
CLOSE cursor_changeTable;

IF t_error=0 THEN
ROLLBACK;
set tmp_update_row=-1;
ELSE
SET @sqlTmps=CONCAT(‘insert into change_empid_log(peid,old_empid,new_empid,update_by,update_date) values (’’’,
peid,’’’,’’’,old_empid,’’’,’’’,new_empid,’’’,’’’,option_user,’’’,STR_TO_DATE(’’’,NOW(),’’’,’’%Y-%m-%d %H:%i:%s’’)’,’)’);
PREPARE stmts FROM @sqlTmps;
EXECUTE stmts;
deallocate prepare stmts;
COMMIT;
END IF;
END;
set updaterow = tmp_update_row;
END$$
DELIMITER ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值