簡體   English   中英

在存儲過程中使用mysql事務

[英]using mysql transaction in stored procedure

我想做如下事情。有一個過程包含另外兩個過程。 第一個在我的“用戶”表中插入一些日期,第二個對其他表執行相同的操作。 問題是,當我用錯誤的“ CountryID”調用此SP時,導致按預期方式導致錯誤,第一個SP(InsertUsername)將提交! 顯然,我要在此錯誤后進行回滾。

BEGIN

START TRANSACTION ;

SET @Username =  _Username;

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

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

COMMIT ;

END

我最近發現,在我們在存儲過程中定義退出處理程序之前,事務無法按預期工作。

我們創建了一個非常粗糙的單行作為默認值:

declare exit handler for SQLWARNING, SQLEXCEPTION begin show warnings limit 5; rollback; end;

就像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$$

如果您有問題要問我,因為我遇到了同樣的問題,最后我找到了這個答案:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM