Reputation: 480
I have a stored procedure that createAssessments
and createAssessmentMarks
for students of that particular section.
Whenever I insert single records it executed successfully but when I try to insert multiple records at one as "Subquery returns more than one-row" error and stores data in assesmentsTable , but not the AssesmentMarksTable
So my questions are:
DELIMITER $$
CREATE PROCEDURE createAssessment(IN name VARCHAR(100), maxMarks INT, classId INT, sectionId INT , subjectId INT)
BEGIN
INSERT INTO assessments (name , maxMarks , classId , sectionId , subjectId) VALUES (name , maxMarks, classId , sectionId , subjectId);
INSERT INTO assessmentMarks (assesmentId , scoredMarks , studentId) VALUES (SELECT LAST_INSERT_ID() FROM assessments) , (scoredMarks) ,(SELECT stud.studentId FROM students stud WHERE stud.sectionId = sectionId);
END $$
DELIMITER ;
Upvotes: 3
Views: 519
Reputation: 480
Thanks @tadman for the hint
After some research I found these as an answer to above two questions:-
DELIMITER $$
CREATE PROCEDURE createAssesment(IN name VARCHAR(100), maxMarks INT, classId INT, sectionId INT , subjectId INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK; -- rollback any changes made in the transaction
END;
SET autocommit = 0;
START TRANSACTION ;
INSERT INTO assesments (name , maxMarks , classId , sectionId , subjectId) VALUES (name , maxMarks , classId , sectionId , subjectId);
INSERT INTO assesmentMarks (assesmentId , studentId )
SELECT LAST_INSERT_ID() , stud.studentId FROM assesments a CROSS JOIN Students stud WHERE stud.sectionId = sectionId;
COMMIT ;
SET autocommit = 1;
END $$
DELIMITER ;
Upvotes: 2