Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Argumento de erro de procedimento armazenado 1 para rotina ... não é uma variável ou NOVA pseudo-variável no gatilho BEFORE


Acho que o problema está na sua chamada para o procedimento.

Com versões do conector MySQL que não suportam OUT parâmetros, a solução normal é usar variáveis ​​de usuário do MySQL para armazenar os valores de retorno e, em seguida, executar uma consulta para obter os valores dessas variáveis.

Primeiro, execute o procedimento armazenado e faça com que o MySQL coloque os valores dos argumentos OUT em variáveis:
CALL `Get_Next_Processing_Video`(@IDVideo, @YoutubeIDVideo);

Observe que essas variáveis ​​não são parâmetros de comando; elas são variáveis ​​que são mantidas na sessão do MySQL. Para obter os valores dessas variáveis, imediatamente após a chamada do procedimento, usando a mesma conexão MySQL:
SELECT @IDVideo, @YoutubeIDVideo ;

E processe o conjunto de resultados dessa consulta como você gostaria que qualquer outra instrução SELECT que esperasse retornar uma linha.

Atualização:


Com versões mais recentes do MySQL Connector que suportam parâmetros OUT, acho que você precisa especificar que esses parâmetros são parâmetros OUT definindo um atributo de membro:
cmd.Parameters["out_IDVideo"].Direction = ParameterDirection.Output;
cmd.Parameters["out_YoutubeIDVideo"].Direction = ParameterDirection.Output;

Como indiquei anteriormente...

Em versões mais antigas do MySQL Connector que não suportavam parâmetros OUT, a solução era chamar o procedimento usando variáveis ​​MySQL como argumentos. Os valores retornados da chamada de procedimento são retidos na sessão do MySQL. Imediatamente após chamar o procedimento, executaríamos um SELECT para recuperar o conteúdo das variáveis ​​do usuário.