sql >> Database teknologi >  >> RDS >> Mysql

Lagret procedurefejl argument 1 for rutine ... er ikke en variabel eller NY pseudovariabel i FØR trigger

Jeg tror, ​​problemet ligger i din opfordring til proceduren.

Med versioner af MySQL-stikket, der ikke understøtter OUT parametre, er den normale løsning at bruge MySQL-brugervariabler til at holde returværdierne og derefter køre en forespørgsel for at få værdierne af disse variabler.

Udfør først den lagrede procedure, og lad MySQL sætte værdierne af OUT-argumenterne ind i variabler:

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

Bemærk, at disse variabler ikke er kommandoparametre; de er variabler, der holdes i MySQL-sessionen. For at få værdierne af disse variabler, umiddelbart efter kaldet til proceduren, ved hjælp af den samme MySQL-forbindelse:

SELECT @IDVideo, @YoutubeIDVideo ;

Og bearbejd resultatsættet fra den forespørgsel, som du gerne vil have enhver anden SELECT-sætning, du forventer skal returnere én række.

Opdatering:

Med nyere versioner af MySQL Connector, der understøtter OUT-parametre, tror jeg, du skal specificere, at disse parametre er OUT-parametre ved at indstille en medlemsattribut:

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

Som jeg antydede tidligere...

I ældre versioner af MySQL Connector, som ikke understøttede OUT-parametre, var løsningen at kalde proceduren ved at bruge MySQL-variabler som argumenter. De værdier, der returneres fra procedurekaldet, bevares i MySQL-sessionen. Umiddelbart efter at have kaldt proceduren, ville vi køre en SELECT for at hente indholdet af brugervariablerne.



  1. Begrænsning af antallet af hentede rækker MySql, Laravel

  2. Hvordan kan jeg få de nederste 50 % af en udvalgt forespørgsel i SQL server?

  3. SQL:Optimering af BETWEEN-sætning

  4. Databasemodel for en 24/7 personaleliste på et kasino