salix/db/routines/psico/procedures/examNew.sql

57 lines
1.2 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `psico`.`examNew`(vFellow VARCHAR(50), vType INT, vQuestionsNumber INT, OUT vExamFk INT)
BEGIN
DECLARE done BOOL DEFAULT FALSE;
DECLARE vFellowFk INT;
DECLARE vQuestionFk INT;
DECLARE rs CURSOR FOR
SELECT q.id
FROM psico.question q
LEFT JOIN psico.questionType qt ON q.id = qt.questionFk
WHERE qt.examTypeFk = vType
ORDER BY randomOrder;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
IF vQuestionsNumber = 0 THEN
SET vQuestionsNumber = 30;
END IF;
CALL psico.answerSort();
CALL psico.questionSort();
INSERT INTO psico.fellow(name) VALUES(vFellow);
SELECT MAX(id) INTO vFellowFk FROM psico.fellow;
INSERT INTO psico.exam(fellowFk, started, questionsCount,examTypeFk) VALUES(vFellowFk, util.VN_NOW(), vQuestionsNumber,vType);
SELECT MAX(id) INTO vExamFk FROM psico.exam;
OPEN rs;
FETCH rs INTO vQuestionFk;
WHILE NOT done AND vQuestionsNumber DO
INSERT INTO psico.examQuestion(examFk, questionFk)
VALUES (vExamFk, vQuestionFk);
FETCH rs INTO vQuestionFk;
SET vQuestionsNumber = vQuestionsNumber - 1;
END WHILE;
CLOSE rs;
END$$
DELIMITER ;