Clausula where com IN

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
aline_plr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 92
Registrado em: Qui, 27 Ago 2009 9:13 am
Localização: Rio Preto

Pessoal criei um loop onde perccoro um bloco e jogo o codigo da empresa em uma variável, como mostra o código abaixo:

Selecionar tudo

go_block('EMP');
FIRST_RECORD;
while :emp.NUM_EMP is not null loop
if v_emp_ger_real is null then
   v_emp_ger_real:=:EMP.NUM_EMP;
else
   v_emp_ger_real:=v_emp_ger_real || ',' || :EMP.NUM_EMP;
end if;
NEXT_RECORD;
end loop;
FIRST_RECORD;
E depois precisava passar a variável v_emp_ger_real como parametro do select, como mostra abaixo:

Selecionar tudo

select ID_CAD_ENTIDADE 
from OFN_COLABORADOR_EMAIL 
where id_cad_emp_gerencial in (v_emp_ger_real)
group by ID_CAD_ENTIDADE;
Mas ocorre erro porque a váriavel v_emp_ger_real é uma string e o campo do where id_cad_emp_gerencial é um inteiro.

OBS: A variável v_emp_ger_real pode conter mais de um código, ex: 1,2

Alguém sabe como posso resolver isso ?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Olá
* Dá pra usar SQL dinâmico pra isso. (tipo, execute_immediate) com a cláusula RETURNING.
Veja: http://glufke.net/oracle/viewtopic.php?t=333

* Pode usar um tokenizer desses:
http://glufke.net/oracle/viewtopic.php?t=753
Um deles inclusive usa pipelined functions

Qualquer dúvida, manda pra nós !


:-o
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Ou execute immediate ou REF CURSOR.
aline_plr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 92
Registrado em: Qui, 27 Ago 2009 9:13 am
Localização: Rio Preto

na verdade to fazendo esse procedimento no forms e não esta dando certo
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

No Forms nenhum jeito vai funcionar, pois usa compilador da versão 8i, faz um procedimento de banco de dados chamado por exemplo:
execute_immediate onde dentro dele terá:

Selecionar tudo

create or replace execute_immediate (instrucao varchar2) is
begin
  execute immediate instrucao;
end;
ai no forms você chama o "execute_immediate" passando seu sql dinamico,

=]
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Um recordgroup não funciona nesse caso?

Caso precise do REFCURSOR terá que chamar um procedimento de banco de dados que fará o cursor e então te retorne um vetor.
thiagoaranha
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 10 Dez 2008 11:26 am
Localização: Santos/SP

Esse bloco não poderia ser um list?
porque com um list você conseguiria fazer o join no próprio select, usando a função CAST

Abraço,
Thiago
Responder
  • Informação
  • Quem está online

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