GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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.

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.

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:

BEGIN
tipo.pergunta(1);
END;

RESULTADO: VALOR 1 é do TIPO NUMBER

E agora um outro tipo:

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 d 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

Share

You may also like...

Deixe um comentário

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