57 lines
1.2 KiB
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 ;
|