Às vezes, você pode precisar passar a entrada para o procedimento armazenado no MySQL. Neste artigo, veremos como criar um procedimento armazenado MySQL com parâmetros e os diferentes tipos de parâmetros suportados em procedimentos armazenados.
Procedimento armazenado do MySQL com parâmetros
Aqui estão as etapas para criar o procedimento armazenado com parâmetros. O MySQL suporta 3 tipos de parâmetros de procedimento armazenado – IN, OUT e INOUT. Vejamos cada um deles em detalhes
EM – Este é o modo padrão. Nesse modo, a instrução de chamada deve passar o argumento para o procedimento armazenado. Além disso, o valor de um parâmetro do tipo IN é protegido, ou seja, mesmo que você altere seu valor dentro do procedimento armazenado, ele permanecerá inalterado fora dele.
SAÍDA – O valor de um parâmetro OUT pode ser alterado dentro do procedimento armazenado e seu novo valor será passado de volta para a instrução de chamada.
INOUT – Nesse caso, a instrução de chamada pode passar um argumento e o procedimento armazenado pode modificar esse valor e passá-lo de volta para a instrução de chamada.
Aqui está a sintaxe do procedimento armazenado com parâmetros no MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)]
Na instrução acima, primeiro especificamos o tipo de parâmetro, depois o nome do parâmetro e o tipo de coluna.
Procedimento armazenado do MySQL com exemplos de parâmetros
Vejamos alguns exemplos de procedimento armazenado com parâmetros.
Parâmetro IN
Aqui está a consulta SQL para criar o procedimento armazenado com o parâmetro IN.
mysql> DELIMITER // mysql> CREATE PROCEDURE get_product( IN prod_id int ) BEGIN SELECT * FROM products WHERE product_id = prod_id; END // mysql> DELIMITER ; mysql> call get_product(1); +------------+--------------+-------+ | product_id | product_name | price | +------------+--------------+-------+ | 1 | iPhone 11 | 400 | +------------+--------------+-------+ mysql> call get_product(); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE sample.get_product; expected 1, got 0
Acima, definimos um parâmetro de procedimento armazenado IN prod_id . Quando passamos seu argumento na instrução de chamada, o procedimento armazenado retorna os resultados esperados. No entanto, se você não passar um argumento, ele dará um erro.
Bônus de leitura:Como criar chave primária composta no MySQL
Parâmetro de SAÍDA
Aqui está um procedimento armazenado criado usando o parâmetro OUT.
mysql> DELIMITER $$ mysql> CREATE PROCEDURE get_count( IN prod_id int, OUT total INT ) BEGIN SELECT COUNT(*) INTO total FROM products WHERE product_id = prod_id; END$$ mysql> DELIMITER ; mysql> call get_count(1,@total); mysql> select @total; +--------+ | @total | +--------+ | 1 | +--------+
No procedimento armazenado acima, definimos 2 parâmetros – um parâmetro IN para prod_id e um parâmetro OUT para armazenar o resultado do procedimento.
Quando passamos o ID do produto na instrução de chamada, nosso procedimento armazenado calcula a contagem de linhas que correspondem a esse ID do produto e armazena o resultado no parâmetro OUT total
Bônus de leitura:Como truncar a tabela no MySQL
Parâmetro INOUT
Aqui está um procedimento armazenado criado usando o parâmetro INOUT.
DELIMITER $$ CREATE PROCEDURE counter( INOUT count INT, IN increment INT ) BEGIN SET count = count + increment; END$$ DELIMITER ;
No procedimento armazenado acima, definimos um parâmetro IN increment e um parâmetro INOUT contagem que armazena o resultado do procedimento armazenado. Nosso procedimento armazenado basicamente adiciona o incremento para contar parâmetro e armazena o resultado em count parâmetro.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Espero que agora você possa criar facilmente um procedimento armazenado com parâmetros no MySQL.
Bônus de leitura:MySQL DROP VIEW
O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!