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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima