Pessoal,
Gostaria de saber se é uma boa abordagem, criar pacotes utilizando
variáveis para receber consultas e, dependendo de determinadas
condições, executar uma ou outra através de concatenação.
Coloquei um exemplo abaixo somente para ilustrar o que eu quero
dizer. Quais as implicações desse tipo de abordagem?
CREATE OR REPLACE PACKAGE pacote_01
AS
DATA_1 DATE;
DATA_2 DATE;
FLAG_1 NUMBER;
DATE_NULL DATE := NULL;
FLAG_2 NUMBER := NULL;
SEL_XX VARCHAR2 (5000);
ABC_00 VARCHAR2 (3000) :=
'SELECT /*+ RULE */
H.COLUNA1,
H.COLUNA2,
H.COLUNA3,
H.COLUNA4,
H.COLUNA5,
COUNT(1),
SUM(H.COLUNA6),
SUM(H.COLUNA7),
SUM(H.COLUNA8),
SUM(DECODE(H.COLUNA6,
(NVL(H.COLUNA7 +
H.COLUNA8, 0) +
NVL(H.COLUNA9 , 0) +
NVL(H.COLUNA10 +
H.COLUNA11 +
H.COLUNA12, 0) ), 0, 1)' ;
ABC_01 VARCHAR2 (3000) :=
' H.COLUNA_A,
H.COLUNA_B,
H.COLUNA_C,
H.COLUNA_D
FROM TABELA1 H
WHERE H.COLUNA_50 = :BIND_1
AND H.COLUNA_51 = :BIND_2
AND F.COLUNA_52 = CONDICAO_1';
ABC_02 VARCHAR2 (3000) :=
' H.COLUNA_D,
H.COLUNA_E,
H.COLUNA_F,
H.COLUNA_G
FROM TABELA1 H
WHERE H.COLUNA_50 > :BIND_1
AND H.COLUNA_51 < :BIND_2
AND H.COLUNA_52 = CONDICAO_1';
PROCEDURE A_1 (
BIND_1 NUMBER,
BIND_2 DATE,
CONDICAO_1 NUMBER );
END pacote_01;
CREATE OR REPLACE PACKAGE BODY pacote_01
AS
PROCEDURE A_1 (
BIND_1 NUMBER,
BIND_2 DATE,
CONDICAO_1 NUMBER )
IS
DATA DATE;
FLAG_1 VARCHAR2(4);
FLAG_2 VARCHAR2(50);
OPCAO NUMBER ;
BEGIN
IF OPCAO = 1 THEN
SEL_XX := ABC_00 || ABC_01;
ELSIF P_OPCAO = 2 THEN
SEL_XX := ABC_00 || ABC_02;
END IF;
END A_1;
END pacote_01;