sql >> Databasteknik >  >> RDS >> Mysql

Lagrade procedurfelargument 1 för rutin ... är inte en variabel eller NY pseudovariabel i BEFORE trigger

Jag tror att problemet ligger i din uppmaning till proceduren.

Med versioner av MySQL-kontakten som inte stöder OUT parametrar, är den normala lösningen att använda MySQL-användarvariabler för att hålla returvärdena och sedan köra en fråga för att få värdena för dessa variabler.

Kör först den lagrade proceduren och låt MySQL lägga in värdena för OUT-argumenten i variabler:

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

Observera att dessa variabler inte är kommandoparametrar; de är variabler som hålls i MySQL-sessionen. För att få värdena för dessa variabler, omedelbart efter anropet till proceduren, med samma MySQL-anslutning:

SELECT @IDVideo, @YoutubeIDVideo ;

Och bearbeta resultatuppsättningen från den frågan som du skulle vilja ha vilken annan SELECT-sats du förväntar dig att returnera en rad.

Uppdatering:

Med nyare versioner av MySQL Connector som stöder OUT-parametrar, tror jag att du måste ange att dessa parametrar är OUT-parametrar genom att ställa in ett medlemsattribut:

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

Som jag antydde tidigare...

I äldre versioner av MySQL Connector som inte stödde OUT-parametrar, var lösningen att anropa proceduren med MySQL-variabler som argument. Värdena som returneras från proceduranropet behålls i MySQL-sessionen. Omedelbart efter att ha anropat proceduren körde vi en SELECT för att hämta innehållet i användarvariablerna.



  1. Heroku migrerar inte modeller i Django

  2. Hur man får unika / distinkta element inuti JSON-arrayen i MySQL 5.7

  3. DML och undantagshantering - Oracle

  4. Ska jag pinga mysql-servern före varje fråga?