mysql - 当调用的子过程失败时防止在过程中提交

标签 mysql stored-procedures

我有两个程序,它们都执行各种插入。过程 B 由过程 A 调用。

如果 procA 中的任何插入失败,则一切正常并且不会进行任何提交。但是,如果 procB 中的某些内容失败,我在 procA 中的插入仍然会提交。我该如何防止这种情况发生。我只需要确保如果过程或子过程中的任何内容失败,则不会提交任何插入。

DROP PROCEDURE IF EXISTS procA;
DELIMITER //
CREATE PROCEDURE procA(parama INT, 
                       paramb VARCHAR(50))
  BEGIN

     INSERT INTO .......
     INSERT INTO .......
     call procB(@paramx, parama);


  END //
DELIMITER ;

DROP PROCEDURE IF EXISTS procB;
DELIMITER //
CREATE PROCEDURE procB(paramx INT, 
                       parama INT)
  BEGIN

     INSERT INTO .......

  END //
DELIMITER ;

最佳答案

只需将过程设为函数 - 然后在出现错误代码时回滚

关于mysql - 当调用的子过程失败时防止在过程中提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588942/

相关文章:

sql - 在 Postgres 触发器过程中执行的查询是否在同一事务中运行?

c# - 从 dapper 调用存储过程,它接受用户定义的表类型列表

mysql - 如何在mysql中为select语句中的多个参数编写存储过程?

php - 堆栈空间不足错误

sql-server - SQL存储过程-表作为参数

mysql - 为什么会自动为外键字段创建索引?

mysql - 如何使用 mysqldump 导出限制和偏移量

sql - T-SQL 存储过程,在 exec 中声明变量

mysql - 将所有内容的所有评论存储在一个表中还是有多个表更好?

mysql - 提取 table1.column2 的总和,其中 table1.column1 包含 table2.column2 中的值