これは私が書いたストアドプロシージャです。私のように単一のSQLタブMySQL Transaction returns error
でDELETE
とUPDATE
を実行したとき:
DELETE FROM curriculumsubjects WHERE curriculumId = 27;
INSERT INTO curriculumsubjects(curriculumId,subjectCode)
VALUES(27,'MATH101');
それが動作します。これは、任意の問題
なしdelete
とinsert
を実行しかし、私のように、ストアドプロシージャを呼び出す場合:
CALL `enrollmentdb`.`updateCurriculumSubjects`(27, 'MATH101');
それはトランザクションの失敗の原因となることができるか、私はROLLBACK
中に入れ'error'
文字列を返します。ストアドプロシージャ本体なしで実行した場合に正常に実行されたときのストアドプロシージャ本文内CALL
?
ここにストアドプロシージャがあります。私はMySQLのワークベンチ6.3と私は何をしようとしているを使用していますところで
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCurriculumSubjects`(IN p_curriculumId int, IN p_subjectCode varchar(100))
BEGIN
DECLARE hasError BOOLEAN DEFAULT 0;
DECLARE CONTINUE HANDLER FOR sqlexception SET hasError = 1;
START TRANSACTION;
DELETE FROM curriculumsubjects WHERE curriculumId = p_curriculumId;
INSERT INTO curriculumsubjects(curriculumId,subjectCode)
VALUES(p_curriculumId,p_subjCode);
IF hasError THEN
ROLLBACK;
SELECT 'error';
ELSE
COMMIT;
END IF;
END
は、私は再び挿入する前にcurriculumIdに一致するすべての列を削除することです。
Javaでは、ストアドプロシージャを複数回挿入するための呼び出しを繰り返します。
お手伝いができたら幸いです。トランザクション内に入ればdelete
とinsert
が動作しない理由が見つかりません。
ありがとうございました。
適切なデバッグを行って、それを再開することによって、継続ハンドラ内の正確なエラー番号を判断する方が簡単です。 – Shadow
エラー処理コードを削除して、削除/挿入のみでストアドプロシージャを実行し、エラーが発生していないか確認してください。 –