2016-06-26 4 views
0

그래서 여기 작성한 저장 프로 시저가 있습니다. 내가 같이MySQL 트랜잭션 반환 오류

하나의 SQL 탭에서 DELETEUPDATE을 실행하는 경우 :

DELETE FROM curriculumsubjects WHERE curriculumId = 27; 
INSERT INTO curriculumsubjects(curriculumId,subjectCode) 
VALUES(27,'MATH101'); 

그것을 작동합니다. 그것은 어떤 문제

없이 deleteinsert을 실행하지만으로 저장 프로 시저를 호출하는 경우 :

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에서 저장 프로 시저에 대한 호출을 여러 번 삽입 할 것입니다.

도와 주시면 감사하겠습니다. 나는 왜 deleteinsert이 거래 내에서 작동하지 않는지 이유를 찾을 수 없다.

감사합니다.

+1

적절한 디버깅을 수행하고 재 처리하여 정확한 처리 오류 번호를 결정하면 쉬울 것입니다. – Shadow

+1

오류 처리 코드를 제거하고 삭제/삽입 만 사용하여 저장 프로 시저를 실행하고 어떤 오류가 발생하는지 확인하십시오. –

답변

0

당신은 당신이 p_subjCode을 작성한 사용자 삽입 구문 단지 실수를하지만 입력 변수는 p_subjectCode 내가 더 버전 지원 (1) TINYINT 부울 형의 변수를 변경합니다.

CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCurriculumSubjects`(IN p_curriculumId int, IN p_subjectCode varchar(100)) 
BEGIN 
DECLARE hasError TINYINT(1) 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_subjectCode); 

IF hasError=1 THEN 
    ROLLBACK; 
    SELECT 'error'; 
ELSE 
    COMMIT; 

END IF; 
END 
+0

도움 주셔서 감사합니다. 나는 그것을 알아 차리지 못했다. 너는 옳았다, 나쁘다. 단지 오타가 잘못되었습니다. 나는 이것을 묻지 말았어야했다. 하지만 고마워. – p3ace

+0

@ p3ace 행운의 남자 :) – HosSeinM