0

以下のように sth を実行したいと思います。他の 2 つのプロシージャを含む 1 つのプロシージャがあります。最初のものは私の「ユーザー」テーブルに日付を挿入し、2番目のものは他のいくつかのテーブルに同じことをします。問題は、間違った 'CountryID' でこの SP を呼び出すと、予期したとおりにプロセスがエラーになり、最初の SP (InsertUsername) がコミットされることです! 明らかに私が望むのは、このエラーの後にロールバックすることです。

BEGIN

START TRANSACTION ;

SET @Username =  _Username;

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

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

COMMIT ;

END
4

2 に答える 2

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 に答える