sql >> Database >  >> RDS >> Mysql

Opgeslagen procedurefoutargument 1 voor routine ... is geen variabele of NIEUWE pseudo-variabele in BEFORE trigger

Ik denk dat het probleem zit in je oproep tot de procedure.

Met versies van de MySQL-connector die geen ondersteuning bieden voor OUT parameters, is de normale oplossing om MySQL-gebruikersvariabelen te gebruiken om de geretourneerde waarden vast te houden en vervolgens een query uit te voeren om de waarden van die variabelen te krijgen.

Voer eerst de opgeslagen procedure uit en laat MySQL de waarden van de OUT-argumenten in variabelen plaatsen:

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

Merk op dat die variabelen geen opdrachtparameters zijn; het zijn variabelen die worden vastgehouden in de MySQL-sessie. Om de waarden van die variabelen te krijgen, onmiddellijk na de aanroep van de procedure, met dezelfde MySQL-verbinding:

SELECT @IDVideo, @YoutubeIDVideo ;

En verwerk de resultatenset van die query zoals je zou willen dat elke andere SELECT-instructie één rij oplevert.

Bijwerken:

Met recentere versies van de MySQL-connector die OUT-parameters ondersteunen, denk ik dat je moet specificeren dat die parameters OUT-parameters zijn door een lidattribuut in te stellen:

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

Zoals ik eerder al aangaf...

In oudere versies van de MySQL Connector die geen OUT-parameters ondersteunde, was de tijdelijke oplossing om de procedure aan te roepen met MySQL-variabelen als argumenten. De waarden die door de procedureaanroep worden geretourneerd, blijven behouden in de MySQL-sessie. Onmiddellijk na het aanroepen van de procedure, zouden we een SELECT uitvoeren om de inhoud van de gebruikersvariabelen op te halen.



  1. Combineer trigram met gerangschikt zoeken in django 1.10

  2. hoe een tabel te partitioneren op datetime-kolom?

  3. Slaapstand meerdere rijen invoegen postgresql

  4. Een groot CLOB-object converteren naar .NET-tekenreeks om in een DataGridView-cel te plaatsen