À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!