- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 18 anos, 11 meses atrás por
chduarte.
-
AutorPosts
-
27 de dezembro de 2006 às 9:34 pm #77810
Anônimo
Tem com fazer algo do tipo:
select *
from MinhaTabela mp
where
if v_nr_cliente != 0 then
mp.nr_cliente = v_nr_cliente
else
mp.dt_atual = sysdate
end if;grato.
27 de dezembro de 2006 às 9:57 pm #77812spernega
ParticipanteVocê pode tentar assim:
select *
from MinhaTabela mp
where ((v_nr_cliente 0 and mp.nr_cliente = v_nr_cliente) or
(v_nr_cliente = 0 and mp.dt_atual = sysdate ))27 de dezembro de 2006 às 10:09 pm #77814Anônimo
já tentei isso, porem desta forma esta dando full table scan.
já tentei com case tambem e é a mesma coisa, vc sabe me informar se existe algum tipo de macro-substituição no oracle ?
grato por sua ajuda.27 de dezembro de 2006 às 10:12 pm #77815chduarte
ParticipanteSegue abaixo mas nao é aconselhavel.
select *
from MinhaTabela mp
where
decode(v_nr_cliente,0,mp.dt_atual,mp.nr_cliente) = decode(v_nr_cliente,0,sysdate,v_nr_cliente)Grande []
27 de dezembro de 2006 às 10:29 pm #77817Anônimo
tentei da forma que vc sugeriu porem retorna o seguinte erro:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER
vc teria mais alguma sugestão ?
grato.
27 de dezembro de 2006 às 10:39 pm #77819chduarte
ParticipanteVerifique se os campos da query batem com os parametros.
O campo “mp.dt_atual” ira procurar uma data. Aqui no caso o sysdate.
O campo “mp.nr_cliente” ira procurar v_nr_cliente.Se ele achar campos diferentes aos valores passados voce ira receber este erro.
Grande []
27 de dezembro de 2006 às 11:07 pm #77821Anônimo
já verifiquei e a ordem do parametros estão ok.
acho que a funcão decode não aceita tipos de dados diferentes na mesma comparação.
grato.
28 de dezembro de 2006 às 3:27 pm #77823passanha
ParticipanteMeu.. olha este ‘GATO’..
create table MinhaTabela (nr_cliente number,dt_atual date);
insert into MinhaTabela values (0,sysdate);
insert into MinhaTabela values (1,sysdate);
insert into MinhaTabela values (2,sysdate);
insert into MinhaTabela values (0,sysdate-30);
insert into MinhaTabela values (1,sysdate-30);
insert into MinhaTabela values (2,sysdate-30);define v_nr_cliente = ‘0’ number;
accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;select *
from MinhaTabela mp
where(&v_nr_cliente != 0 and &v_nr_cliente = mp.nr_cliente) or
(&v_nr_cliente = 0 and to_date(mp.dt_atual,’DD/MM/YYYY’) = to_date(sysdate,’DD/MM/YYYY’))
/Resultado…
v_nr_cliente = 0
SQL> accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;
NUM.CLIENTE: 0NR_CLIENTE DT_ATUAL
0 28/12/06 1 28/12/06 2 28/12/06v_nr_cliente = 1
SQL> accept v_nr_cliente number PROMPT ‘NUM.CLIENTE: ‘;
NUM.CLIENTE: 1NR_CLIENTE DT_ATUAL
1 28/12/06 1 28/11/0628 de dezembro de 2006 às 3:37 pm #77825chduarte
ParticipanteTente este:
select *
from MinhaTabela mp
where
decode(v_nr_cliente,0,to_char(mp.dt_atual,’dd/mm/yy’),mp.nr_cliente) = decode(v_nr_cliente,0,to_char(sysdate,’dd/mm/yy’),v_nr_cliente).Ele tem que achar os mesmos tipos de dados.
Grande []
-
AutorPosts
- Você deve fazer login para responder a este tópico.