我想做下面的事情。有一个程序包含另外两个程序。 第一个在我的'User'表中插入一些日期,第二个在其他表中执行相同的操作。问题是,当我使用错误的“CountryID”调用此SP时,会导致进程出现预期的错误,第一个SP(InsertUsername)提交! 显然我想要的是在此错误后回滚。
BEGIN
START TRANSACTION ;
SET @Username = _Username;
CALL `InsertUsername` (
@Username , @UserID
);
CALL `InsertAddress` (
@UserID , _CountryID , _AdderssText , _PostalCode
);
COMMIT ;
END
答案 0 :(得分:0)
我最近发现,在我们在存储过程中定义退出处理程序之前,事务没有按预期工作。
我们创建了一个相当粗略的单行用作默认值:
declare exit handler for SQLWARNING, SQLEXCEPTION begin show warnings limit 5; rollback; end;
答案 1 :(得分:0)
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$$
如果您有疑问,请问我 因为我有同样的问题,最后我找到了这个答案:)