Also hier ist die gespeicherte Prozedur, die ich geschrieben habe. Als ich die DELETE
und UPDATE
in einem einzigen SQL-Registerkarte liefMySQL-Transaktion gibt Fehler
wie:
DELETE FROM curriculumsubjects WHERE curriculumId = 27;
INSERT INTO curriculumsubjects(curriculumId,subjectCode)
VALUES(27,'MATH101');
funktioniert es. Er führt delete
und insert
ohne Probleme
Aber wenn ich die gespeicherte Prozedur wie nennen:
CALL `enrollmentdb`.`updateCurriculumSubjects`(27, 'MATH101');
es gibt die 'error'
String i während ROLLBACK
setzen
Was das Scheitern der Transaktion verursachen könnte innerhalb der gespeicherten Prozedur body, wenn es erfolgreich ausgeführt wird, wenn ohne gespeicherte Prozedur ausgeführt CALL
?
Hier ist die gespeicherte Prozedur.
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
Durch die Art, wie ich bin mit MySQL Workbench 6.3 und was ich versuche zu tun, um alle Spalten löschen Sie die curriculumId passende, bevor ich wieder ein.
In Java werde ich den Aufruf der gespeicherten Prozedur für mehrere Einfügungen wiederholen.
Ich hoffe, Sie können helfen. Ich kann einfach keinen Grund finden, warum delete
und insert
nicht funktionieren, wenn sie in eine Transaktion eingefügt werden.
Danke.
Es wäre einfacher, wenn Sie eine ordnungsgemäße Fehlersuche durchgeführt und die genaue Fehlernummer im Continue-Handler ermittelt haben, indem Sie es residieren. – Shadow
Versuchen Sie, den Fehlerbehandlungscode zu entfernen, und führen Sie die gespeicherte Prozedur nur mit delete/insert aus, und sehen Sie, welcher Fehler auftaucht. –