Cursor, como?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Necessito fazer um procedimento usando CURSORS para me ler vários campos de uma tabela, ver se o valor não é nulo ou 0 e nesse caso escrever para uma tabela todos esses valores diferentes de zero apenas para apenas uma nova coluna em uma outra tabela.

A minha duvida como leio várias colunas à procura desses valores diferentes de 0 ou nulo e depois escrevo apenas para uma coluna?

Melhores Cumprimentos,
André.
rcoelho_6
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Ter, 04 Nov 2008 1:56 pm
Localização: SP - são Paulo

Não entendi a pergunta, seria bom você por algum codigo que já tentou fazer e o nome dos campos e das tabelas...

mas acho que você pode adicionar isso na condição do select.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

É melhor mostrar o código.

Necessito de passar dois parametros num procedimento. O SEMESTRE, podendo este ser 1 ou 2 e o ANO, o ano vou passar em numero e depos converto para date com o TO_DATE, no entanto estou a ter algumas dificuldades, fruto da minha pouca experiencia em programação.

Selecionar tudo

create or replace procedure M4PR_LIST_TRAB_EXTRA

(
pSEMESTRE      NUMBER,
pANO         NUMBER
)

is

CURSOR RUB_TRAB_EXTRA IS
SELECT 
m4t_acumulado_rl.id_empregad,
m4t_empregad.nome,
sum(m4t_acumulado_rl.N_HE_DDU_50_N41),
sum(m4t_acumulado_rl.N_HE_DDU_75_N41),
sum(m4t_acumulado_rl.NHE_DDO_100_N41),
sum(m4t_acumulado_rl.NHE_DCF_100_N41),
sum(m4t_acumulado_rl1.NHE_F_100_N1),
sum(m4t_acumulado_rl.N_HE_DDU_50_N42),
sum(m4t_acumulado_rl.N_HE_DDU_75_N42),
sum(m4t_acumulado_rl.NHE_DDO_100_N42),
sum(m4t_acumulado_rl.NHE_DCF_100_N42),
sum(m4t_acumulado_rl1.NHE_F_100_N2)
FROM m4t_acumulado_rl, m4t_acumulado_rl1, m4t_empregad
where
m4t_acumulado_rl.id_sociedad = m4t_acumulado_rl1.id_sociedad
and
m4t_acumulado_rl.id_empregad = m4t_acumulado_rl1.id_empregad
and
m4t_acumulado_rl.dat_ini_act_emp = m4t_acumulado_rl1.dat_ini_act_emp
and
m4t_acumulado_rl.data_imputacao = m4t_acumulado_rl1.data_imputacao
and
m4t_acumulado_rl.dat_pagm = m4t_acumulado_rl1.dat_pagm
and
m4t_acumulado_rl.id_empregad = m4t_empregad.id_empregad
and
(m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or 
m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N41 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N41 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N41 > 0 or
m4t_acumulado_rl1.NHE_F_100_N1 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N42 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N42 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N42 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N42 > 0 or
m4t_acumulado_rl1.NHE_F_100_N2 > 0)
and
m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY')
.
.
.
GROUP BY 
m4t_acumulado_rl.id_empregad, m4t_empregad.nome
order by m4t_empregad.nome
Primeiras dúvidas, porque é que esta igualidade não funciona?

Selecionar tudo

m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY')
Se o mesmo código em vez de levar um "=", levar um ">", ">=" ou outro termo de comparação já funciona.

Estou também a moer a cabeça no arranjar uma forma de passar 1 ou 2 no parametro pSEMESTRE e ele saber que para 1 estou a referir os meses entre Janeiro e Junho, e para 2 estou a referir os meses entre Julho e Dezembro.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Já tenho o procedimento a correr, no entanto estou com alguns problemas...

O procedimento:

Selecionar tudo

create or replace procedure M4PR_LIST_TRAB_EXTRA

(
pSEMESTRE      NUMBER,
pANO         NUMBER
)

is

CURSOR RUB_TRAB_EXTRA IS
SELECT
m4t_acumulado_rl.id_empregad,
m4t_empregad.nome,
sum(m4t_acumulado_rl.N_HE_DDU_50_N41),
sum(m4t_acumulado_rl.N_HE_DDU_75_N41),
sum(m4t_acumulado_rl.NHE_DDO_100_N41),
sum(m4t_acumulado_rl.NHE_DCF_100_N41),
sum(m4t_acumulado_rl1.NHE_F_100_N1),
sum(m4t_acumulado_rl.N_HE_DDU_50_N42),
sum(m4t_acumulado_rl.N_HE_DDU_75_N42),
sum(m4t_acumulado_rl.NHE_DDO_100_N42),
sum(m4t_acumulado_rl.NHE_DCF_100_N42),
sum(m4t_acumulado_rl1.NHE_F_100_N2)
FROM m4t_acumulado_rl, m4t_acumulado_rl1, m4t_empregad
where
m4t_acumulado_rl.id_sociedad = m4t_acumulado_rl1.id_sociedad
and
m4t_acumulado_rl.id_empregad = m4t_acumulado_rl1.id_empregad
and
m4t_acumulado_rl.dat_ini_act_emp = m4t_acumulado_rl1.dat_ini_act_emp
and
m4t_acumulado_rl.data_imputacao = m4t_acumulado_rl1.data_imputacao
and
m4t_acumulado_rl.dat_pagm = m4t_acumulado_rl1.dat_pagm
and
m4t_acumulado_rl.id_empregad = m4t_empregad.id_empregad
and
(m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N41 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N41 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N41 > 0 or
m4t_acumulado_rl1.NHE_F_100_N1 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N42 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N42 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N42 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N42 > 0 or
m4t_acumulado_rl1.NHE_F_100_N2 > 0)
and
m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY')
/* m4t_acumulado_rl.dat_pagm > TO_DATE('2008','YY') funciona c este*/ 

GROUP BY
m4t_acumulado_rl.id_empregad, m4t_empregad.nome
order by m4t_empregad.nome;


vID_EMPREGAD    m4t_acumulado_rl.id_empregad%TYPE;
vNOME           m4t_empregad.nome%TYPE;
vN1_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N41%TYPE;
vN1_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N41%TYPE;
vN1_DD0_100     m4t_acumulado_rl.NHE_DDO_100_N41%TYPE;
vN1_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N41%TYPE;
vN1_F_100       m4t_acumulado_rl1.NHE_F_100_N1%TYPE;
vN2_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N42%TYPE;
vN2_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N42%TYPE;
vN2_DDO_100     m4t_acumulado_rl.NHE_DDO_100_N42%TYPE;
vN2_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N42%TYPE;
vN2_F_100       m4t_acumulado_rl1.NHE_F_100_N2%TYPE;


begin

      OPEN RUB_TRAB_EXTRA;
      LOOP

        FETCH RUB_TRAB_EXTRA INTO vID_EMPREGAD, vNOME, vN1_DDU_50, vN1_DDU_75, vN1_DD0_100, vN1_DCF_100, vN1_F_100, vN2_DDU_50, vN2_DDU_75, vN2_DDO_100, vN2_DCF_100, vN2_F_100; 
        EXIT WHEN RUB_TRAB_EXTRA%NOTFOUND;

        IF vID_EMPREGAD IS NOT NULL THEN
        NULL; /* INSERT INTO ... */
        END IF;
     

     END LOOP;
     CLOSE RUB_TRAB_EXTRA;

commit;
end;

Questão: Como consigo meter esta igualdade a funcionar?

Selecionar tudo

m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY')
Sei que esta igualdade não funciona, que caminho posso seguir para contornar isto?

Cumprimentos.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Tentou com TO_CHAR em ambos?

Selecionar tudo

to_char(m4t_acumulado_rl.dat_pagm,'YY') = TO_CHAR(pANO,'YY')
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Desde já muito obrigado pela resposta.

Com o TO_CHAR nos dois, devolve na mesma valores nulos, quando n deveria devolver.

Dei a volta assim:

Selecionar tudo

m4t_acumulado_rl.dat_pagm > TO_DATE(pANO,'YY')
AND
m4t_acumulado_rl.dat_pagm <= TO_DATE((pANO + 1),'YY')
O procedimento já está quase acabado, falta-me apenas saber como trabalhar com um intervalo usando apenas mês e dia.

O procedimento:

Selecionar tudo

create or replace procedure M4PR_LIST_TRAB_EXTRA

(
pSEMESTRE      NUMBER,
pANO         NUMBER
)

is


CURSOR RUB_TRAB_EXTRA IS
SELECT
m4t_acumulado_rl.id_empregad,
m4t_empregad.nome,
sum(m4t_acumulado_rl.N_HE_DDU_50_N41),
sum(m4t_acumulado_rl.N_HE_DDU_75_N41),
sum(m4t_acumulado_rl.NHE_DDO_100_N41),
sum(m4t_acumulado_rl.NHE_DCF_100_N41),
sum(m4t_acumulado_rl1.NHE_F_100_N1),
sum(m4t_acumulado_rl.N_HE_DDU_50_N42),
sum(m4t_acumulado_rl.N_HE_DDU_75_N42),
sum(m4t_acumulado_rl.NHE_DDO_100_N42),
sum(m4t_acumulado_rl.NHE_DCF_100_N42),
sum(m4t_acumulado_rl1.NHE_F_100_N2)
FROM m4t_acumulado_rl, m4t_acumulado_rl1, m4t_empregad
where
m4t_acumulado_rl.id_sociedad = m4t_acumulado_rl1.id_sociedad
and
m4t_acumulado_rl.id_empregad = m4t_acumulado_rl1.id_empregad
and
m4t_acumulado_rl.dat_ini_act_emp = m4t_acumulado_rl1.dat_ini_act_emp
and
m4t_acumulado_rl.data_imputacao = m4t_acumulado_rl1.data_imputacao
and
m4t_acumulado_rl.dat_pagm = m4t_acumulado_rl1.dat_pagm
and
m4t_acumulado_rl.id_empregad = m4t_empregad.id_empregad
and
(m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N41 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N41 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N41 > 0 or
m4t_acumulado_rl1.NHE_F_100_N1 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N42 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N42 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N42 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N42 > 0 or
m4t_acumulado_rl1.NHE_F_100_N2 > 0)
and
m4t_acumulado_rl.dat_pagm > TO_DATE(pANO,'YY')
AND
m4t_acumulado_rl.dat_pagm <= TO_DATE((pANO + 1),'YY') /* N CONSIGO FAZER: m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY') */
GROUP BY
m4t_acumulado_rl.id_empregad, m4t_empregad.nome
order by m4t_empregad.nome;


vID_EMPREGAD    m4t_acumulado_rl.id_empregad%TYPE;
vNOME           m4t_empregad.nome%TYPE;
vN1_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N41%TYPE;
vN1_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N41%TYPE;
vN1_DD0_100     m4t_acumulado_rl.NHE_DDO_100_N41%TYPE;
vN1_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N41%TYPE;
vN1_F_100       m4t_acumulado_rl1.NHE_F_100_N1%TYPE;
vN2_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N42%TYPE;
vN2_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N42%TYPE;
vN2_DDO_100     m4t_acumulado_rl.NHE_DDO_100_N42%TYPE;
vN2_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N42%TYPE;
vN2_F_100       m4t_acumulado_rl1.NHE_F_100_N2%TYPE;

vDAT_PAGM       m4t_acumulado_rl.dat_pagm%TYPE;

vMES_1          NUMBER;
vMES_2          NUMBER;

begin
                

        

      OPEN RUB_TRAB_EXTRA;
      LOOP

        FETCH RUB_TRAB_EXTRA INTO vID_EMPREGAD, vNOME, vN1_DDU_50, vN1_DDU_75, vN1_DD0_100, vN1_DCF_100, vN1_F_100, vN2_DDU_50, vN2_DDU_75, vN2_DDO_100, vN2_DCF_100, vN2_F_100; 
        EXIT WHEN RUB_TRAB_EXTRA%NOTFOUND;


        IF pSEMESTRE = 1 THEN
           IF vDAT_PAGM BETWEEN --dia25mesJaneiro-- AND --dia25mesJunho-- THEN
           NULL;
           END IF;
          
        END IF;
        
        IF pSEMESTRE = 2 THEN
        NULL; 
        END IF;
     

     END LOOP;
     CLOSE RUB_TRAB_EXTRA;

commit;
end;

Falta-me agora saber como trabalhar com um intervalo de datas usando apenas dia e mês

Selecionar tudo

IF pSEMESTRE = 1 THEN
           IF vDAT_PAGM BETWEEN --dia25mesJaneiro-- AND --dia25mesJunho-- THEN
           NULL;
           END IF;
          
        END IF;
onde está --dia25mesJaneiro-- e --dia25mesJunho-- necessito de colocar a data apenas com dia/mês, os dias e os meses serão sempre os mesmos, dia 25 do mês de Janeiro e dia 25 do mês de Junho. Como poderei fazer este IF?

Cumprimentos.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, para comparar dia e mês, dá uma olhada neste exemplo abaixo:

Selecionar tudo

SELECT 1
  FROM DUAL
 WHERE TO_CHAR (SYSDATE, 'DDMM') BETWEEN '0111' AND '0811';
Qualquer coisa, manda pra gente.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Valeu,

Funciona assim:

Selecionar tudo

SELECT *
  FROM M4T_ACUMULADO_RL 
 WHERE TO_CHAR (DAT_INI_ACT_EMP, 'DD') BETWEEN '01' AND '07'
 AND
 TO_CHAR (DAT_INI_ACT_EMP, 'MM') BETWEEN '11' AND '11';
Se colocar DDMM não funciona correctamente.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Bem, o procedimento está um pouco mal estruturado, fruto da minha inexperiencia em programação...

Vou ter de usar um IF THEN em um col BETWEEN, isto será possivel??

Selecionar tudo

and
m4t_acumulado_rl.dat_pagm 
BETWEEN 
IF pSEMESTE = 1 THEN NULL; END IF; IF pSEMESTE = 2 THEN NULL; END IF;
AND 
'2009-01-01'
Estava a testar uma coisa deste tipo... será possivel usar IF numa comparação com o BETWEEN?

Cumprimentos.
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Bem, está feito.

Programadores experientes devem estar a dar uma boa risada deste código, mas está funcional, espero.

Obrigado pela ajuda.

Procedimento:

Selecionar tudo

create or replace procedure M4PR_LIST_TRAB_EXTRA

(
pSEMESTRE      NUMBER,
pANO         NUMBER
)

is

/* CURSOR PRIMEIRO SEMESTRE */
CURSOR RUB_TRAB_EXTRA_1 IS
SELECT
m4t_acumulado_rl.id_empregad,
m4t_empregad.nome,
sum(m4t_acumulado_rl.N_HE_DDU_50_N41),
sum(m4t_acumulado_rl.N_HE_DDU_75_N41),
sum(m4t_acumulado_rl.NHE_DDO_100_N41),
sum(m4t_acumulado_rl.NHE_DCF_100_N41),
sum(m4t_acumulado_rl1.NHE_F_100_N1),
sum(m4t_acumulado_rl.N_HE_DDU_50_N42),
sum(m4t_acumulado_rl.N_HE_DDU_75_N42),
sum(m4t_acumulado_rl.NHE_DDO_100_N42),
sum(m4t_acumulado_rl.NHE_DCF_100_N42),
sum(m4t_acumulado_rl1.NHE_F_100_N2)
FROM m4t_acumulado_rl, m4t_acumulado_rl1, m4t_empregad
where
m4t_acumulado_rl.id_sociedad = m4t_acumulado_rl1.id_sociedad
and
m4t_acumulado_rl.id_empregad = m4t_acumulado_rl1.id_empregad
and
m4t_acumulado_rl.dat_ini_act_emp = m4t_acumulado_rl1.dat_ini_act_emp
and
m4t_acumulado_rl.data_imputacao = m4t_acumulado_rl1.data_imputacao
and
m4t_acumulado_rl.dat_pagm = m4t_acumulado_rl1.dat_pagm
and
m4t_acumulado_rl.id_empregad = m4t_empregad.id_empregad
and
(m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N41 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N41 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N41 > 0 or
m4t_acumulado_rl1.NHE_F_100_N1 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N42 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N42 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N42 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N42 > 0 or
m4t_acumulado_rl1.NHE_F_100_N2 > 0)
and
m4t_acumulado_rl.dat_pagm > TO_DATE(pANO,'YY')
AND
m4t_acumulado_rl.dat_pagm <= TO_DATE((pANO + 1),'YY') /* N CONSIGO FAZER: m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY') */
and
TO_CHAR(m4t_acumulado_rl.dat_pagm, 'DD') BETWEEN '25' AND '25'
AND
TO_CHAR(m4t_acumulado_rl.dat_pagm, 'MM') BETWEEN '01' AND '06'
GROUP BY
m4t_acumulado_rl.id_empregad, m4t_empregad.nome
order by m4t_empregad.nome;

/* CURSOR SEGUNDO SEMESTRE */
CURSOR RUB_TRAB_EXTRA_2 IS
SELECT
m4t_acumulado_rl.id_empregad,
m4t_empregad.nome,
sum(m4t_acumulado_rl.N_HE_DDU_50_N41),
sum(m4t_acumulado_rl.N_HE_DDU_75_N41),
sum(m4t_acumulado_rl.NHE_DDO_100_N41),
sum(m4t_acumulado_rl.NHE_DCF_100_N41),
sum(m4t_acumulado_rl1.NHE_F_100_N1),
sum(m4t_acumulado_rl.N_HE_DDU_50_N42),
sum(m4t_acumulado_rl.N_HE_DDU_75_N42),
sum(m4t_acumulado_rl.NHE_DDO_100_N42),
sum(m4t_acumulado_rl.NHE_DCF_100_N42),
sum(m4t_acumulado_rl1.NHE_F_100_N2)
FROM m4t_acumulado_rl, m4t_acumulado_rl1, m4t_empregad
where
m4t_acumulado_rl.id_sociedad = m4t_acumulado_rl1.id_sociedad
and
m4t_acumulado_rl.id_empregad = m4t_acumulado_rl1.id_empregad
and
m4t_acumulado_rl.dat_ini_act_emp = m4t_acumulado_rl1.dat_ini_act_emp
and
m4t_acumulado_rl.data_imputacao = m4t_acumulado_rl1.data_imputacao
and
m4t_acumulado_rl.dat_pagm = m4t_acumulado_rl1.dat_pagm
and
m4t_acumulado_rl.id_empregad = m4t_empregad.id_empregad
and
(m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N41 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N41 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N41 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N41 > 0 or
m4t_acumulado_rl1.NHE_F_100_N1 > 0 or
m4t_acumulado_rl.N_HE_DDU_50_N42 > 0 or
m4t_acumulado_rl.N_HE_DDU_75_N42 > 0 or
m4t_acumulado_rl.NHE_DDO_100_N42 > 0 or
m4t_acumulado_rl.NHE_DCF_100_N42 > 0 or
m4t_acumulado_rl1.NHE_F_100_N2 > 0)
and
m4t_acumulado_rl.dat_pagm > TO_DATE(pANO,'YY')
AND
m4t_acumulado_rl.dat_pagm <= TO_DATE((pANO + 1),'YY') /* N CONSIGO FAZER: m4t_acumulado_rl.dat_pagm = TO_DATE(pANO,'YY') */
and
TO_CHAR(m4t_acumulado_rl.dat_pagm, 'DD') BETWEEN '25' AND '25'
AND
TO_CHAR(m4t_acumulado_rl.dat_pagm, 'MM') BETWEEN '06' AND '12'
GROUP BY
m4t_acumulado_rl.id_empregad, m4t_empregad.nome
order by m4t_empregad.nome;


vID_EMPREGAD    m4t_acumulado_rl.id_empregad%TYPE;
vNOME           m4t_empregad.nome%TYPE;
vN1_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N41%TYPE;
vN1_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N41%TYPE;
vN1_DD0_100     m4t_acumulado_rl.NHE_DDO_100_N41%TYPE;
vN1_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N41%TYPE;
vN1_F_100       m4t_acumulado_rl1.NHE_F_100_N1%TYPE;
vN2_DDU_50      m4t_acumulado_rl.N_HE_DDU_50_N42%TYPE;
vN2_DDU_75      m4t_acumulado_rl.N_HE_DDU_75_N42%TYPE;
vN2_DDO_100     m4t_acumulado_rl.NHE_DDO_100_N42%TYPE;
vN2_DCF_100     m4t_acumulado_rl.NHE_DCF_100_N42%TYPE;
vN2_F_100       m4t_acumulado_rl1.NHE_F_100_N2%TYPE;

vDAT_PAGM       m4t_acumulado_rl.dat_pagm%TYPE;

vMES_1          NUMBER;
vMES_2          NUMBER;

begin

     /* SE FOR PRIMEIRO SEMESTRE */           
    IF pSEMESTRE = 1 THEN
        
      OPEN RUB_TRAB_EXTRA_1;
      LOOP

        FETCH RUB_TRAB_EXTRA_1 INTO vID_EMPREGAD, vNOME, vN1_DDU_50, vN1_DDU_75, vN1_DD0_100, vN1_DCF_100, vN1_F_100, vN2_DDU_50, vN2_DDU_75, vN2_DDO_100, vN2_DCF_100, vN2_F_100; 
        EXIT WHEN RUB_TRAB_EXTRA_1%NOTFOUND;
        
        null;

    
     

     END LOOP;
     CLOSE RUB_TRAB_EXTRA_1;
    END IF;
    
    
    /* SE FOR SEGUNDO SEMESTRE */
    IF pSEMESTRE = 2 THEN
        
      OPEN RUB_TRAB_EXTRA_2;
      LOOP

        FETCH RUB_TRAB_EXTRA_2 INTO vID_EMPREGAD, vNOME, vN1_DDU_50, vN1_DDU_75, vN1_DD0_100, vN1_DCF_100, vN1_F_100, vN2_DDU_50, vN2_DDU_75, vN2_DDO_100, vN2_DCF_100, vN2_F_100; 
        EXIT WHEN RUB_TRAB_EXTRA_2%NOTFOUND;
        
        null;

     
     

     END LOOP;
     CLOSE RUB_TRAB_EXTRA_2;
    END IF;

commit;
end;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes