Isso não vai funcionar NUNCA em SQL estático (que é o default em se
escrevendo SQl em PL/SQL), o manual "Oracle9i SQL Reference" já nos
avisa que os operadores de listas (como o IN) trabalham com uma LISTA
de valores, e NÂO com um único valor string, exemplo :

[EMAIL PROTECTED]:SQL>select * from dept;

            DEPTNO DNAME          LOC
------------------ -------------- -------------
                10 ACCOUNTING     NEW YORK
                20 RESEARCH       DALLAS
                30 SALES          CHICAGO
                40 OPERATIONS     BOSTON
                77 Depto 77       LOC77
                78 Ação           Pí de Sá
                50 Pólen          Vitória
                43 Depto 43       LOC43

8 linhas selecionadas.

==> vamos pasar VÁRIOS valores :

[EMAIL PROTECTED]:SQL>select * from dept where deptno in (10, 20, 30);

            DEPTNO DNAME          LOC
------------------ -------------- -------------
                10 ACCOUNTING     NEW YORK
                20 RESEARCH       DALLAS
                30 SALES          CHICAGO

==> vou passar uma única string :

[EMAIL PROTECTED]:SQL>select * from dept where deptno in ('10, 20, 30');
select * from dept where deptno in ('10, 20, 30')
                                    *
ERRO na linha 1:
ORA-01722: número inválido


Sim ??? Pra vc fazer isto vc precisa de SQL dinâmico, no plus poderia
ser algo tipo :

[EMAIL PROTECTED]:SQL>select * from dept where deptno in (&v_lista_depto);
Informe o valor para v_lista_depto: 10, 20, 30
antigo   1: select * from dept where deptno in (&v_lista_depto)
novo   1: select * from dept where deptno in (10, 20, 30)

            DEPTNO DNAME          LOC
------------------ -------------- -------------
                10 ACCOUNTING     NEW YORK
                20 RESEARCH       DALLAS
                30 SALES          CHICAGO

agora sim.... Evidentemente, SQL dinâmico com & é um recurso do
sqlplus apenas, no caso do PL/SQL (que é no que procedures são
escritas), vc faz SQL dinâmico com EXECUTE IMMEDIATE ou DBMS_SQL, ou
ainda vc tem uma OUTRA opção que é ter uma LISTA de valores (array),
em http://asktom.oracle.com/pls/ask/f?
p=4950:8:::::F4950_P8_DISPLAYID:110612348061 vc tem um exemplo.

==> e seja qual método vc usar, repito, NÂO faça conversões
implícitas, compare DATEs com DATEs, ok ??

[]s

Chiappa
--- Em oracle_br@yahoogrupos.com.br, "Itamar Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> É pq na verdade esse parâmetro que eu passo é um intervalo de datas
no
> formato ('01/01/2005','03/02/2005','01/01/2004'), na query, se eu
> substituo roda sem problema, mas passando como parâmetro na proc é
que
> dá esse erro.
>
>
> Em 25/04/06, jlchiappa<[EMAIL PROTECTED]> escreveu:
> > Itamar, alguma coisa está estranha aí , esse
> > AtivLocal.ativ_dt_data_inicio será que não é DATE ?? Se sim, vc
> > definiu p_DataIni como IN VARCHAR2, necessariamente se vc tentar
> > comparar DATE com VARCHAR vai haver conversão implícita,
dependendo
> > de como estiver o formato default de data no cliente PODE ou não
> > funcionar.... OU vc define p_DataIni como DATE, OU vc faz a
conversão
> > explícita, com AtivLocal.ativ_dt_data_inicio in (TO_DATE
> > (p_DataIni, 'nnnnnnn') onde nnnnn é o formato de data desejado. E
> > outra coisa, porque esse IN se NECESSARIAMENTE um parâmetro sempre
> > contém apenas um valor ???
> >
> > []s
> >
> > Chiappa
> >
> > --- Em oracle_br@yahoogrupos.com.br, "Itamar Ribeiro"
<[EMAIL PROTECTED]>
> > escreveu
> >
> > >
> > > Pessoal, estou com uma dúvida ao fazer uma proc que usa
cláusula IN:
> > >
> > >
> > > CREATE OR REPLACE PACKAGE BODY Pkg_Teste AS
> > >  PROCEDURE Proc_Teste(Meu_Cursor IN OUT Tipo_Cursor, p_Matri IN
> > > NUMBER, p_DataIni IN VARCHAR2) IS
> > >  BEGIN
> > >   OPEN Meu_Cursor FOR
> > >   SELECT
> > >   AtivLocal.empr_nr_matricula,
> > >   AtivLocal.Loca_Cd_Local,TO_CHAR
> > (AtivLocal.atlo_dt_ini, 'DD/MM/YYYY')
> > > data_ini,
> > >   TO_CHAR(AtivLocal.atlo_dt_fim, 'DD/MM/YYYY') data_fim
> > >   FROM ppp_atividade_local AtivLocal, ppp_local Loca,
> > ppp_instalacao Inst
> > >   WHERE AtivLocal.loca_cd_local = Loca.loca_cd_local
> > >   AND Loca.inst_cd_instalacao = Inst.inst_cd_instalacao
> > >   AND AtivLocal.empr_nr_matricula = p_Matri
> > >   AND AtivLocal.ativ_dt_data_inicio in (p_DataIni)
> > >   order by AtivLocal.atlo_dt_fim asc;
> > >
> > > Ao rodar essa proc ele retorna o seguinte erro:
> > >
> > > ORA-01858: a non-numeric character was found where a numeric was
> > expected
> > > ORA-06512: at "SPPP.PKG_TESTE", line 4
> > > ORA-06512: at line 11
> > >
> > > Estou esbarrando na cláusula in, como faço para rodar essa
query com
> > > os parâmetros corretos?
> > >
> > > Obrigado.
> > >
> >
> >
> >
> >
> >
> >
> > ------------------------------------------------------------------
--------------------------------------------------------
> > Atenção! As mensagens deste grupo são de acesso público e de
inteira
> > responsabilidade de seus remetentes.
> > Acesse:
> > http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> > ------------------------------------------------------------------
--------------------------------------------------------
__________________________________________________________________
> >
> > Este Grupo recebe o apoio da SQL Magazine -
www.devmedia.com.br/sqlmagazine
> > __________________________________________________________________
> > O grupo Oracle_br não aceita anexos. Quando oferecer algum
arquivo, tenha o
> > link do mesmo para evitar trafego(pedidos) desnecessário.
> >
> >
> > ________________________________
> > Links do Yahoo! Grupos
> >
> > Para visitar o site do seu grupo na web, acesse:
> > http://br.groups.yahoo.com/group/oracle_br/
> >
> > Para sair deste grupo, envie um e-mail para:
> > [EMAIL PROTECTED]
> >
> > O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
Serviço do
> > Yahoo!.
>






--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine
__________________________________________________________________
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário.



Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE


Links do Yahoo! Grupos

Responder a