Ниже приведена моя хранимая процедура. Он отлично работает, но моя проблема заключается в том, что выходной параметр не может быть равен VARCHAR
.Mysql Stored Proc не возвращает параметр VARCHAR out
часть, где у меня проблемы является назначение @curcName
в выводимый параметр op_resultMessage
BEGIN
SET op_resultMessage = @curcName;
END;
Вот хранимых процедур.
CREATE DEFINER=`root`@`localhost` PROCEDURE `addCurriculum`(
IN p_curcName varchar(100),
IN p_description TEXT,
IN p_yearLevel VARCHAR(50),
IN p_syStart INT,
IN p_syEnd INT,
IN p_creator VARCHAR(50),
OUT op_resultMessage VARCHAR(50))
BEGIN
DECLARE curcName VARCHAR(20) ;
IF EXISTS
(SELECT @curcName := `name`
FROM curriculum
WHERE
yearLevel = p_yearLevel
AND syStart = p_syStart
AND syEnd = p_syEnd)
THEN --
BEGIN
SET op_resultMessage = @curcName;
END;
ELSE
BEGIN
INSERT INTO curriculum(`name`, description, yearLevel, syStart, syEnd, creator)
VALUES(p_curcName,p_description,p_yearLevel,p_syStart,p_syEnd,p_creator);
END;
END IF;
END
Я пытаюсь вернуть сообщение IF EXISTS name
Так оно и должно пойти что-то вроде
SET op_resultMessage = @curcName 'already uses the school year and year level you're trying to insert';
Но я не знаю, как правильно конкатенации и присваивать значения. Я все еще путаюсь с операторами := SET
и =
. Наверное, у меня проблемы.
Если изменить тип затраченного параметра к INT
как
OUT op_resultMessage VARCHAR(50)
затем присваивает номер op_resultMessage
как SET op_resultMessage = 1;
Он возвращает как из значения параметров номер 1. Он просто не будет работать с варчаром.
Так что, когда я пытаюсь вызвать процедуру
CALL `enrollmentdb`.`addCurriculum`
('Test Curriculum ','Test ','Grade 1',2015,2016,'jordan',@outputMsg);
SELECT @outputMsg; -- this doesn't return any value even if Grade 1, 2015 and 2016 exists
Я был бы признателен за любую помощь. Недавно я только что узнал mysql.
Спасибо.
Спасибо за помощь. Когда я увидел ваш ответ, я понял, что использовал ненужные блоки if-else, где я могу просто проверить, является ли curcName нулевым. Я ценю это. Благодарю. – p3ace
мое удовольствие. Надеюсь, вы разрешите его 1-й ряд. – Drew