No desenvolvimento de sistemas que utilizam banco de dados Oracle, entender a diferença entre Function, Procedure e Package no PL/SQL é essencial para escrever códigos eficientes e bem organizados. Vamos explorar as características de cada um e fornecer exemplos práticos de uso.
Função (Function)
As funções no PL/SQL são subprogramas que retornam um valor e podem ser usadas em expressões SQL. Elas são úteis para realizar cálculos e retornar valores derivados.
Características:
- Retorna obrigatoriamente um único valor.
- Pode ser usada em consultas SQL.
- Aceita parâmetros de entrada e saída.
Exemplo:
CREATE OR REPLACE FUNCTION FNC_CALCULA_DESCONTO (
p_preco NUMBER,
p_desconto NUMBER
) RETURN NUMBER IS
BEGIN
RETURN p_preco - (p_preco * p_desconto / 100);
END;
/
Uso:
SELECT FNC_CALCULA_DESCONTO(100, 10) AS preco_com_desconto FROM dual;
PRECO_COM_DESCONTO
------------------
90
Procedimento (Procedure)
Os procedimentos são subprogramas que executam uma ação específica, como inserir, atualizar ou excluir dados, mas não retornam valores diretamente.
Características:
- Não retorna valores diretamente.
- Utilizado para executar ações.
- Aceita parâmetros de entrada e saída.
Exemplo:
CREATE OR REPLACE PROCEDURE PRC_ATUALIZA_SALARIO (
p_emp_id NUMBER,
p_novo_salario NUMBER
) IS
BEGIN
UPDATE employees
SET salary = p_novo_salario
WHERE employee_id = p_emp_id;
END;
/
Uso:
BEGIN
PRC_ATUALIZA_SALARIO(1001, 6000);
END;
/
PL/SQL procedure successfully completed.
Pacote (Package)
Os pacotes são coleções de funções, procedimentos e outras definições de PL/SQL agrupadas logicamente. Eles ajudam na organização e reutilização do código.
Características:
- Agrupa múltiplas funções, procedimentos e variáveis.
- Facilita a manutenção e a segurança do código.
- Melhora o desempenho ao carregar o código na memória uma vez.
Exemplo Especificação do Pacote:
CREATE OR REPLACE PACKAGE PKG_GERENCIA_EMPREGADOS IS
PROCEDURE prc_atualiza_salario (p_emp_id NUMBER, p_novo_salario NUMBER);
FUNCTION fnc_calcula_bonus (p_emp_id NUMBER) RETURN NUMBER;
END PKG_GERENCIA_EMPREGADOS;
/
Exemplo Corpo do Pacote:
CREATE OR REPLACE PACKAGE BODY PKG_GERENCIA_EMPREGADOS IS
PROCEDURE prc_atualiza_salario (p_emp_id NUMBER, p_novo_salario NUMBER) IS
BEGIN
UPDATE employees
SET salary = p_novo_salario
WHERE employee_id = p_emp_id;
END;
FUNCTION fnc_calcula_bonus (p_emp_id NUMBER) RETURN NUMBER IS
v_bonus NUMBER;
BEGIN
SELECT salary * 0.1 INTO v_bonus FROM employees WHERE employee_id = p_emp_id;
RETURN v_bonus;
END;
END PKG_GERENCIA_EMPREGADOS;
/
Uso:
BEGIN
PKG_GERENCIA_EMPREGADOS.prc_atualiza_salario(1001, 6000);
DBMS_OUTPUT.PUT_LINE('Bonus: ' || PKG_GERENCIA_EMPREGADOS.fnc_calcula_bonus(1001));
END;
/
Diferença entre Specification e Body
Specification
- Definição: A specification é a interface do pacote. Ela declara os tipos, variáveis, constantes, cursores, exceções e subprogramas (procedures e functions) que são acessíveis de fora do pacote.
- Propósito: Serve como contrato, definindo o que o pacote faz sem expor como as funcionalidades são implementadas.
Body
- Definição: O body é a implementação do pacote. Ele define como as funções e procedimentos declarados na specification são executados.
- Propósito: Contém o código real dos subprogramas e a lógica de negócio, mantendo-a encapsulada e separada da interface pública.
Vantagens da Separação
- Encapsulamento: A separação permite esconder a implementação e expor apenas a interface pública, seguindo o princípio da ocultação de informação.
- Manutenção: Alterações no body não afetam diretamente a interface do pacote, permitindo modificações internas sem impacto nas partes que utilizam o pacote.
- Reutilização: Pacotes bem definidos podem ser facilmente reutilizados em diferentes partes de um sistema ou em diferentes projetos.
- Organização: Mantém o código organizado e modular, facilitando a leitura e o entendimento do que cada parte do sistema faz.
Cada tipo de subprograma em PL/SQL tem seu próprio uso e benefícios. Funções são ideais para cálculos e retornos de valores específicos, tornando-as perfeitas para operações que devem devolver um resultado. Procedimentos são mais adequados para executar ações que não necessitam retornar valores, como inserções, atualizações ou exclusões de dados. Pacotes oferecem uma maneira estruturada de agrupar funções e procedimentos relacionados, facilitando a organização, a manutenção e a reutilização do código. A combinação desses elementos, quando usada corretamente, pode melhorar significativamente a eficiência e a manutenibilidade do seu código PL/SQL. Além disso, pacotes permitem o encapsulamento de lógica complexa, promovendo a modularização e a segurança do código.
#20240715 #FitaLoka #MetaTomarSeuLugar #ChicoteEstrala #GeneralDBA #TrânsitoNaBelmira #GuinaNoPortão #AlagouDeNovoCampinhoBolaBranca #ProibidoCochilar #MundoMágicoOZ #GuinaNãoTinhaDó #SeReagirBúmViraPó #OMetrôVaiPassar #DBAProblemático #FugaCorreria