Pular para o conteúdo

Overload em PL/SQL: Saiba como utilizar sobrecarga em procedures e funções dentro de uma package

My Certification Path – Chapter I (Overload em PL/SQL)

Olá pessoal ! Aqui estou de volta com um novo assunto, Overload em PL/SQL. A idéia veio de uma discussão que tive uma vez com programadores sobre PL/SQL. Para minha surpresa, me deparei com  uma afirmação no qual foi dito de que não existia sobrecarga em PL/SQL. Uma pérola !

Então resolvi mostrar de uma maneira simples a utilização de sobrecarga em procedure e funções dentro de uma package. Para isso, vamos utilizar os scripts abaixo para criar a nossa package chamada TIPO. Ela terá a funcionalidade de identificar 3 tipos de variáveis: VARCHAR2, NUMBER e DATE.

PLSQL
CREATE OR REPLACE PACKAGE tipo AS

PROCEDURE pergunta(p_texto IN VARCHAR2);

PROCEDURE pergunta(p_texto IN NUMBER);

PROCEDURE pergunta(p_texto IN DATE);

FUNCTION  resposta(p_tipo IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  resposta(p_tipo IN NUMBER)   RETURN VARCHAR2;

FUNCTION  resposta(p_tipo IN DATE)     RETURN VARCHAR2;

END tipo;

CREATE OR REPLACE PACKAGE BODY tipo AS
v_resposta VARCHAR2(100) := NULL;

PROCEDURE pergunta(p_texto VARCHAR2) IS
BEGIN

DBMS_OUTPUT.PUT_LINE('VALOR ' || p_texto || ' é ' || Resposta(p_texto));

END;

PROCEDURE pergunta(p_texto NUMBER) IS
BEGIN

DBMS_OUTPUT.PUT_LINE('VALOR ' || p_texto || ' é ' || Resposta(p_texto));

END;

PROCEDURE pergunta(p_texto DATE) IS
BEGIN

DBMS_OUTPUT.PUT_LINE('VALOR ' || p_texto || ' é ' || Resposta(p_texto));

END;

FUNCTION resposta(p_tipo VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
BEGIN

v_resposta := 'DO TIPO VARCHAR';
EXCEPTION
WHEN OTHERS THEN
v_resposta := 'ERRO';
END;

RETURN(v_resposta);
END resposta;

FUNCTION resposta(p_tipo NUMBER)
RETURN VARCHAR2 IS
v_resposta VARCHAR2(100);
BEGIN
BEGIN

v_resposta := 'DO TIPO NUMÉRICO';
EXCEPTION
WHEN OTHERS THEN
v_resposta := 'ERRO';
END;

RETURN(v_resposta);
END;

FUNCTION resposta(p_tipo DATE)
RETURN VARCHAR2 IS
v_resposta VARCHAR2(100);
BEGIN
BEGIN

v_resposta := 'DO TIPO DATA';
EXCEPTION
WHEN OTHERS THEN
v_resposta := 'ERRO';
END;

RETURN(v_resposta);
END;

END tipo;

Utilizaremos as procedures PERGUNTA que irão chamar as funções RESPOSTA para devolver o resultado. Abaixo  um pequeno bloco anônimo com uma variável caracter para teste.

PLSQL
BEGIN
tipo.pergunta('TESTE');
END;

RESULTADO: VALOR TESTE é do TIPO VARCHAR

Ao executarmos com um valor do tipo CHAR, a engine do PL/SQL executou a procedure que atendia ao tipo de variável.

Vamos fazer mais um teste:

PLSQL
BEGIN
tipo.pergunta(1);
END;

RESULTADO: VALOR 1 é do TIPO NUMBER

E agora um outro tipo:

PLSQL
BEGIN
tipo.pergunta(TO_DATE('01/01/2014','DD/MM/YYYY'));
END;

RESULTADO: VALOR 01/01/2014 é do TIPO DATA

Este foi um teste simples, pois não vou mais me alongar na explicação. Espero que o conceito e implementação de Overload em PL/SQL tenha ficado claro e que seja de alguma valia para alguém ! 🙂

Quaisquer dúvidas, basta entrar em contato e enviar sua pergunta.

Um grande abraço

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Deixe um comentário

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

plugins premium WordPress