0

我想做下面的事情。有一个程序包含另外两个程序。第一个将一些日期插入到我的“用户”表中,第二个对其他一些表执行相同的操作。问题是,当我使用错误的“CountryID”调用此 SP 并导致进程按预期出现错误时,第一个 SP(插入用户名)提交!显然我想要的是在这个错误之后回滚。

BEGIN

START TRANSACTION ;

SET @Username =  _Username;

CALL `InsertUsername` (
@Username , @UserID
);

CALL `InsertAddress` (
@UserID , _CountryID , _AdderssText , _PostalCode 
);

COMMIT ;

END
4

2 回答 2

0

我最近发现,在我们在存储过程中定义退出处理程序之前,事务并没有按预期工作。

我们创建了一个相当粗略的单线作为默认值:

declare exit handler for SQLWARNING, SQLEXCEPTION begin show warnings limit 5; rollback; end;
于 2013-09-02T10:30:14.380 回答
0

就像 simon.evans 说我终于找到了正确的答案,它对我有用,所以我想添加更多细节:

CREATE PROCEDURE `add`(IN serial_number VARCHAR(20), IN tarnsaction_type INT
, OUT errcode VARCHAR(3))
BEGIN

DECLARE      my_balance NUMERIC(15,3);
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
  BEGIN

  ROLLBACK;
  SET errcode = '058';
  END;

 CALL procedure2(p_account_id,v_account_balance);
 #do what ever you want to do here

END$$

如果你有问题问我,因为我有同样的问题,最后我找到了这个答案:)

于 2013-11-11T08:11:23.653 回答