Oi, Érika! Tudo bem com você?
O INOUT é um tipo de parâmetro que permite que uma variável seja passada para uma procedure, podendo ser lida e modificada dentro dela. Isso significa que você pode tanto enviar um valor para a procedure quanto receber um valor de volta após sua execução. Em outras palavras, ele funciona como um parâmetro de entrada e saída ao mesmo tempo.
No exemplo que você trouxe, funciona assim:
- O valor inicial de valorTotal é passado para a procedure.
- A procedure calcula um desconto usando o valor que foi passado.
- O valor de valorTotal é atualizado ao subtrair o desconto calculado.
- Quando a procedure termina, o valorTotal que foi alterado pode ser usado fora dela, retornando o novo valor.
- Por exemplo, se você chamar a procedure com um
valorTotal
de 100, e a função CalcularDesconto
retornar um desconto de 10, a procedure irá subtrair o desconto do valorTotal
, resultando em 90. Esse valor de 90 será o novo valor de valorTotal
após a execução da procedure.
Vamos à prática entender ainda melhor. O primeiro passo é criar uma procedure que calcula o desconto de 10% diretamente no código:
DELIMITER $$
CREATE PROCEDURE AplicarDescontoNaCompra(INOUT valorTotal DECIMAL)
BEGIN
DECLARE desconto DECIMAL;
-- Calcula o desconto de 10% diretamente
SET desconto = valorTotal * 0.10;
-- Aplica o desconto ao valor total
SET valorTotal = valorTotal - desconto;
END$$
DELIMITER ;
Agora, precisamos testar a procedure que criamos:
-- Declara uma variável para o valor total
SET @valorTotal = 100.00;
-- Chama a procedure
CALL AplicarDescontoNaCompra(@valorTotal);
-- Exibe o novo valor total
SELECT @valorTotal AS NovoValorTotal;
Perceba que ao executar o código, o valor total é atualizado para refletir o desconto aplicado.
Dessa forma, usando o INOUT, conseguimos atualizar a variável @valorTotal fora da procedure. Isso é vantajoso porque permite que a mesma variável seja modificada e utilizada fora da procedure, o que é útil em situações onde precisamos aplicar a variável em diferentes fluxos de processamento ou lógica, aumentando a flexibilidade do código.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado