Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehlerargument 1 der gespeicherten Prozedur für Routine ... ist keine Variable oder NEUE Pseudovariable im BEFORE-Trigger

Ich denke, das Problem liegt in Ihrem Aufruf zum Verfahren.

Mit Versionen des MySQL-Connectors, die OUT nicht unterstützen -Parametern besteht die normale Problemumgehung darin, MySQL-Benutzervariablen zum Speichern der Rückgabewerte zu verwenden und dann eine Abfrage auszuführen, um die Werte dieser Variablen abzurufen.

Führen Sie zuerst die gespeicherte Prozedur aus und lassen Sie MySQL die Werte der OUT-Argumente in Variablen schreiben:

CALL `Get_Next_Processing_Video`(@IDVideo, @YoutubeIDVideo);

Beachten Sie, dass diese Variablen keine Befehlsparameter sind; Sie sind Variablen, die in der MySQL-Sitzung gehalten werden. So erhalten Sie die Werte dieser Variablen unmittelbar nach dem Aufruf der Prozedur unter Verwendung derselben MySQL-Verbindung:

SELECT @IDVideo, @YoutubeIDVideo ;

Und verarbeiten Sie die Ergebnismenge dieser Abfrage wie jede andere SELECT-Anweisung, von der Sie erwarten, dass sie eine Zeile zurückgibt.

Aktualisierung:

Bei neueren Versionen des MySQL Connectors, die OUT-Parameter unterstützen, müssen Sie meines Erachtens angeben, dass diese Parameter OUT-Parameter sind, indem Sie ein Member-Attribut festlegen:

cmd.Parameters["out_IDVideo"].Direction = ParameterDirection.Output;
cmd.Parameters["out_YoutubeIDVideo"].Direction = ParameterDirection.Output;

Wie ich bereits angedeutet habe...

In älteren Versionen des MySQL-Connectors, die keine OUT-Parameter unterstützten, bestand die Problemumgehung darin, die Prozedur mit MySQL-Variablen als Argumente aufzurufen. Die vom Prozeduraufruf zurückgegebenen Werte werden in der MySQL-Sitzung beibehalten. Unmittelbar nach dem Aufruf der Prozedur würden wir ein SELECT ausführen, um den Inhalt der Benutzervariablen abzurufen.