
Procedures em PL/SQL
As procedures (ou procedimentos) em PL/SQL são subprogramas armazenados no banco de dados que realizam ações específicas. Elas são utilizadas para encapsular e reutilizar lógica de negócios, facilitando a manutenção e a organização do código.
Vantagens de Usar Procedures
- Reutilização de Código: Procedures podem ser reutilizadas em diferentes partes da aplicação, reduzindo a duplicação de código.
- Modularidade: Facilitam a divisão do código em módulos menores e mais gerenciáveis.
- Segurança: Permitem controlar o acesso e a execução de determinadas ações no banco de dados.
- Manutenção: Simplificam a manutenção e atualização do código, uma vez que mudanças na lógica podem ser feitas centralmente.
Criando uma Procedure
Para criar uma procedure em PL/SQL, utilizamos a palavra-chave CREATE PROCEDURE
seguida do nome da procedure e dos seus parâmetros opcionais.
Sintaxe:
CREATE [OR REPLACE] PROCEDURE nome_da_procedure (parâmetros) IS -- Declarações locais BEGIN -- Bloco de código END nome_da_procedure;
Exemplo:
CREATE OR REPLACE PROCEDURE ajustar_salario(p_codigo_cargo IN NUMBER, p_percentual IN NUMBER) IS BEGIN UPDATE funcionarios SET salario = salario * (1 + p_percentual / 100) WHERE codigo_cargo = p_codigo_cargo; COMMIT; END ajustar_salario;
Neste exemplo, a procedure ajustar_salario
recebe dois parâmetros: p_codigo_cargo
e p_percentual
. Ela ajusta o salário dos funcionários com base no cargo especificado e no percentual fornecido.
Chamando uma Procedure
Para chamar uma procedure, utilizamos a instrução EXECUTE
ou CALL
.
Sintaxe:
EXECUTE nome_da_procedure(parâmetros);
Exemplo:
EXECUTE ajustar_salario(3, 10);
Esta chamada ajusta o salário dos funcionários com o código de cargo igual a 3 em 10%.
Observação: Procedures também podem ser chamadas dentro de blocos anônimos usando BEGIN ...; END;
.
Exemplo:
BEGIN ajustar_salario(3, 10); END;
Parâmetros de Procedures
Os parâmetros de uma procedure podem ser de três tipos:
- IN: Parâmetros de entrada, utilizados para fornecer valores à procedure.
- OUT: Parâmetros de saída, utilizados para retornar valores da procedure.
- IN OUT: Parâmetros que servem tanto para entrada quanto para saída.
Exemplo:
CREATE OR REPLACE PROCEDURE manipular_valores(p_in IN NUMBER, p_out OUT NUMBER, p_in_out IN OUT NUMBER) IS BEGIN p_out := p_in * 2; p_in_out := p_in_out + p_out; END manipular_valores;
Tratamento de Exceções em Procedures
É importante tratar exceções em procedures para garantir a robustez do código e a correta gestão de erros.
Exemplo:
CREATE OR REPLACE PROCEDURE ajustar_salario(p_codigo_cargo IN NUMBER, p_percentual_aumento IN NUMBER) IS BEGIN UPDATE funcionarios SET salario = salario * (1 + p_percentual_aumento / 100) WHERE codigo_cargo = p_codigo_cargo; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Nenhum registro encontrado com o código de cargo fornecido.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Ocorreu um erro: ' || SQLERRM); ROLLBACK; END ajustar_salario;
Neste exemplo, a procedure ajustar_salario
tenta atualizar os salários dos funcionários com o código de cargo fornecido. Se nenhum registro for encontrado com o código de cargo fornecido, uma mensagem é exibida. Se ocorrer qualquer outro erro, uma mensagem de erro é exibida e a transação é revertida.
SAVEPOINT
Os pontos de salvamento permitem marcar um ponto na transação que pode ser revertido sem afetar as operações anteriores ao ponto de salvamento.
Exemplo:
CREATE OR REPLACE PROCEDURE atualizar_e_excluir_funcionarios(p_codigo_cargo_atualizar IN NUMBER, p_percentual_aumento IN NUMBER, p_codigo_cargo_excluir IN NUMBER) IS BEGIN -- Atualiza o salário dos funcionários com o código de cargo fornecido UPDATE funcionarios SET salario = salario * (1 + p_percentual_aumento / 100) WHERE codigo_cargo = p_codigo_cargo_atualizar; -- Define um ponto de salvamento SAVEPOINT ponto1; -- Exclui os funcionários com o código de cargo fornecido DELETE FROM funcionarios WHERE codigo_cargo = p_codigo_cargo_excluir; -- Confirma a transação COMMIT; EXCEPTION WHEN OTHERS THEN -- Reverte até o ponto de salvamento se ocorrer um erro ROLLBACK TO ponto1; DBMS_OUTPUT.PUT_LINE('Ocorreu um erro: ' || SQLERRM); END atualizar_e_excluir_funcionarios;
Neste exemplo, a procedure atualizar_e_excluir_funcionarios
tenta atualizar o salário dos funcionários com o código de cargo fornecido. Após a atualização, um ponto de salvamento (SAVEPOINT ponto1
) é definido. Em seguida, a procedure tenta excluir os funcionários com um código de cargo diferente. Se ocorrer um problema durante a exclusão, a transação é revertida até o ponto de salvamento, preservando a atualização anterior.
Considerações Finais
As procedures são fundamentais para a criação de aplicações robustas e escaláveis em Oracle, permitindo encapsular lógica de negócios e promover a reutilização e manutenção eficiente do código. Com o uso adequado de parâmetros e tratamento de exceções, as procedures podem ser poderosas ferramentas para gerenciar operações complexas no banco de dados.
Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!