Unten ist meine gespeicherte Prozedur. Es funktioniert gut, aber mein Problem ist, dass ich den Ausgabeparameter nicht als VARCHAR
erhalten kann.Mysql Stored Proc liefert keinen VARCHAR out-Parameter
Der Teil, wo ich Problem habe, ist die Zuordnung von @curcName
an den Out-Parameter op_resultMessage
BEGIN
SET op_resultMessage = @curcName;
END;
Hier ist die gespeicherte Prozedur.
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
Ich versuche, eine Nachricht zurück, wenn name
VORHANDEN So sollte es so etwas wie
SET op_resultMessage = @curcName 'already uses the school year and year level you're trying to insert';
Aber ich weiß nicht, gehen, wie man richtig und Werte zuweisen verketten. Ich bin immer noch verwirrt mit := SET
und =
Betreiber. Ich denke, da habe ich Probleme.
Wenn ich die Out-Parameter des Typen ein INT
wie
OUT op_resultMessage VARCHAR(50)
ändern weist dann eine Nummer op_resultMessage
wie SET op_resultMessage = 1;
Es gibt die Nummer 1 als aus Parameterwert. Es wird einfach nicht mit Varchar funktionieren.
Also, wenn ich versuche, das Verfahren zu nennen
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
ich Hilfe schätzen würde. Ich habe gerade erst mysql gelernt.
Danke.
Danke für die Hilfe. Als ich deine Antwort gesehen habe, wurde mir klar, dass ich unnötige Blöcke verwendet habe, wenn ich nur überprüfen kann, ob curcName null ist. Ich schätze es. Vielen Dank. – p3ace
mein Vergnügen. Ich hoffe, dass Sie den 1-Zeilen-Max-Aspekt darauf auflösen. – Drew