Como enviar variáveis que não parametros p dentro d 1 cursor

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,

Estou novamente com duvidas em relação ao que posso ou nºao fazer com cursores.

A minha questão é: Posso enviar variáveis que não parametros para dentro de um cursor?

Exemplo:

Selecionar tudo

create or replace procedure M4PR_DIFERENCIAL_CHEFIA_

(
pMES      NUMBER,
pANO         NUMBER
)

is


CURSOR QUEM_E_CHEFIA IS
select
m4t_hist_cargos.id_sociedad,
m4t_hist_cargos.id_empregad,
m4t_hist_cargos.id_cargo
from
m4t_hist_cargos
where
m4t_hist_cargos.id_empregad = vID_EMP;




vID_SOCIEDADE_CHEFE    m4t_hist_cargos.id_sociedad%TYPE;
vID_EMPREGAD_CHEFE     m4t_hist_cargos.id_empregad%TYPE;
vID_CARGO_CHEFE        m4t_hist_cargos.id_cargo%TYPE;

vID_EMP NUMBER;



begin

    vID_EMP :=01;

      OPEN QUEM_E_CHEFIA;
      LOOP

        FETCH QUEM_E_CHEFIA INTO vID_SOCIEDADE_CHEFE, vID_EMPREGAD_CHEFE, vID_CARGO_CHEFE;
        EXIT WHEN QUEM_E_CHEFIA%NOTFOUND;

        null;


     END LOOP;
     CLOSE RUB_TRAB_EXTRA_1;

commit;
end;
Questão:

Como conseguirei meter esta comparação a funcionar?

---> m4t_hist_cargos.id_empregad = vID_EMP

Dou um valor à variavel vID_EMP, mas ela fica inválida quando compilo o procedimento. O que estarei a fazer mal e como poderei dar a volta a esta situação?


Cumprimentos, André.
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, já consegui... tinha apenas de declarar a variavel antes do cursor.

Selecionar tudo

create or replace procedure M4PR_DIFERENCIAL_CHEFIA_

(
pMES      NUMBER,
pANO         NUMBER
)



is
vID_EMP NUMBER;

CURSOR QUEM_E_CHEFIA IS
select
m4t_hist_cargos.id_sociedad,
m4t_hist_cargos.id_empregad,
m4t_hist_cargos.id_cargo
from
m4t_hist_cargos
where
m4t_hist_cargos.id_empregad = vID_EMP;



vID_SOCIEDADE_CHEFE    m4t_hist_cargos.id_sociedad%TYPE;
vID_EMPREGAD_CHEFE     m4t_hist_cargos.id_empregad%TYPE;
vID_CARGO_CHEFE        m4t_hist_cargos.id_cargo%TYPE;





begin

    vID_EMP :=01;

      OPEN QUEM_E_CHEFIA;
      LOOP

        FETCH QUEM_E_CHEFIA INTO vID_SOCIEDADE_CHEFE, vID_EMPREGAD_CHEFE, vID_CARGO_CHEFE;
        EXIT WHEN QUEM_E_CHEFIA%NOTFOUND;

        null;


     END LOOP;
     CLOSE QUEM_E_CHEFIA;

commit;
end;
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

Lopes, segue este exemplo abaixo também, caso precise:

Selecionar tudo

DECLARE 
  CURSOR cur_empregado (pnro NUMBER)
    IS 
      SELECT empno,
             ename,
             job
        FROM emp
       WHERE empno = pnro;

  vret cur_empregado%ROWTYPE;      

BEGIN
  OPEN cur_empregado(1);
  FETCH cur_empregado INTO vret;
  CLOSE cur_empregado;
  
  dbms_output.put_line('Empregado: '||vret.empno||' Nome: '||vret.ename);
  
END;      
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

Desde já obrigado Trevisolli,

Já tinha visto código usando essa sintaxe, mas não tinha percebido como funcionava. Sempre a aprender.

Mais uma vez obrigado.
Responder
  • Informação
  • Quem está online

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