Stored Procedures
Uma stored procedure (procedimento armazenado), em analogia com a programação, tem comportamento similar a uma função ou procedimento. A ideia é favorecer o reúso uma sequência de comandos, possibilitando melhor organização do código. Vamos pensar na seguinte tabela:
CREATE TABLE aluno(
rga VARCHAR(15) PRIMARY KEY,
nome VARCHAR(100) NOT NULL
);
Para cadastrarmos dois alunos, podemos usar o comando INSERT INTO aluno(rga,nome) VALUES ("1234","José")
. Para simplificar a operação, podemos também criar um procedimento. Para tanto, usamos o comando CREATE PROCEDURE
.
Ao criarmos um procedimento, podemos definir tanto parâmetros de entrada (IN
) quanto de saída (OUT
), para retornar os valores a quem chamou o procedimento. Há também a possibilidade de usar parâmetros de entrada/saída (INOUT
).
Para executar várias instruções dentro da procedure, usamos o bloco BEGIN ... END
.
Observe o exemplo a seguir, que trata da criação do procedimento:
DELIMITER \\
CREATE PROCEDURE InserirAluno(
IN r VARCHAR(15),
IN n VARCHAR(100)
)
BEGIN
INSERT INTO aluno(rga, nome) VALUES (r,n);
END\\
DELIMITER ;
Para executar uma stored procedure, utilizamos o comando CALL
, passando os valores esperados nos parâmetros:
CALL InserirAluno("123", "Francisco");
Além de inserir ou atualizar informações, uma procedure pode retornar valores por meio de parâmetros de saída. Isso permite que o resultado de cálculos ou buscas seja atribuído a variáveis.
DELIMITER \\
CREATE PROCEDURE obterNomeAluno(
IN rga VARCHAR(15),
OUT nome VARCHAR(100)
)
BEGIN
SELECT nome INTO nome
FROM aluno
WHERE aluno.rga = rga
LIMIT 1;
END\\
DELIMITER ;
Para chamar essa procedure e capturar o valor de saída:
CALL obterNomeAluno('123', @nome);
SELECT @nome;
O valor do nome será armazenado na variável de sessão @nome
.
Se for necessário modificar uma procedure existente, podemos fazer uso do ALTER PROCEDURE
. Caso não seja mais necessária, ela pode ser removida com DROP PROCEDURE
.
DROP PROCEDURE IF EXISTS InserirAluno;
Veja a documentação completa aqui.