그래서 여기 작성한 저장 프로 시저가 있습니다. 내가 같이MySQL 트랜잭션 반환 오류
하나의 SQL 탭에서 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
오류 처리 코드를 제거하고 삭제/삽입 만 사용하여 저장 프로 시저를 실행하고 어떤 오류가 발생하는지 확인하십시오. –