SQL

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.