Picture of Roberto Sobrinho
Roberto Sobrinho

16/07/2024

Function Procedure Package no PL/SQL: Diferenças e Exemplos Práticos


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

  1. 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.
  2. 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.
  3. Reutilização: Pacotes bem definidos podem ser facilmente reutilizados em diferentes partes de um sistema ou em diferentes projetos.
  4. 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 🧨🥸



Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print

Pesquisar

Roberto Sobrinho

Sou Roberto Fernandes Sobrinho, também conhecido como Sobrinho DBA , pós graduado em “Architecture and Database Administration”, entusiasta, dedicado e com 20 anos de experiência com Oracle Database e suas diversas distribuições e variações.

Oracle ACE Associate

2025

Specialist

Exadata Database Machine X9M

Professional

Oracle Database Administration

Professional

Oracle Database 19c: RAC, ASM, & Grid Infra Administrator

Professional

Oracle Autonomous Database Cloud

Professional

Oracle Cloud Database Migration and Integration

Professional

Oracle Database PL/SQL Developer

Associate

Oracle Cloud Infrastructure Architect

Associate

Oracle Cloud Infrastructure Foundations

Categorias

Categorias

Tags

Function Procedure Package no PL/SQL: Diferenças e Exemplos Práticos