- Este tópico contém 11 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 3 meses atrás por
CelyCalat.
-
AutorPosts
-
23 de novembro de 2010 às 4:35 pm #96962
CelyCalat
ParticipanteEu não estou conseguindo utilizar o case em uma determinada situação :
Tenho o parametro P_1, que se ele for 1 , deve verificar uma coluna da tabela se = ‘A’.
Seria assim :select
case
when P_1 = 1
then E.STATUS_TRANS = ‘A’
FROM EMENDAS EAlguem tem alguma sugestão de como fazer isso dentro de um select ?
Obrigada.23 de novembro de 2010 às 4:49 pm #96963Niggaz
ParticipanteBom dia CelyCalat!
O que exatamente vc quer retornar?
23 de novembro de 2010 às 5:01 pm #96965Peterson
ParticipanteSe o parâmetro P_1 for igual a 1 ele deve retornar o valor da coluna ou verificar se o valor é igual a A? Se tiver que verificar acho q vc tem q colocar um IF.
23 de novembro de 2010 às 5:07 pm #96966CelyCalat
Participante[quote=”Niggaz”:298ydreg]Bom dia CelyCalat!
O que exatamente vc quer retornar?[/quote]
Bom dia !Na verdade é um select bem grande referente a uma tela com varios filtros e um dos filtros verifica um determinado parametro que se for 1 , uma coluna da tabela deve ser ‘A’ , ou se for 2 esta coluna deve ser ‘B’.
Se eu fosse utilizar um if seria assim :If p_1 = 1 then v_coluna_tabela := ‘A’;
elsif v_coluna_tabela := ‘B’ ;
end if;O resultado deve ser assim :
select *
from emendas e
where e.status_trans = v_coluna_tabela;Tenho que colocar esta validação (if) na clausula where do cursor .
Não sei se consegui explicar…
Obrigada !!!
23 de novembro de 2010 às 5:17 pm #96967Niggaz
ParticipanteBom, eu achei um pouco confuso…rs mas vamos lá:
O case seria algo assim:
select
case
when P_1 = 1 then E.STATUS_TRANS = 'A'
when P_1 = 2 then E.STATUS_TRANS = 'B'
END
FROM EMENDAS E
Agora, eu não entendi a parte do if…Vc quer utilizar os valores A e B verificar no WHERE, é isso?
23 de novembro de 2010 às 5:44 pm #96969CelyCalat
ParticipanteSeria isso mesmo, mas eu testei utilizando o CASE e aparece o erro ORA-00905.
Obrigada.[quote=”Niggaz”:31k9yoqs]Bom, eu achei um pouco confuso…rs mas vamos lá:
O case seria algo assim:
select
case
when P_1 = 1 then E.STATUS_TRANS = 'A'
when P_1 = 2 then E.STATUS_TRANS = 'B'
END
FROM EMENDAS E
Agora, eu não entendi a parte do if…Vc quer utilizar os valores A e B verificar no WHERE, é isso?[/quote]
23 de novembro de 2010 às 5:56 pm #96970Niggaz
ParticipanteÉ, eu dei uma vacilada…rs
No case é errado fazer: then E.STATUS_TRANS = ‘A’, teria que ser: then ‘A’.
Ai no caso essa seria a sua coluna de verificação, ficando assim:
select
case
when P_1 = 1 then 'A'
when P_1 = 2 then 'B'
END verificacao
FROM EMENDAS E
Tenta ai!
23 de novembro de 2010 às 6:04 pm #96971Niggaz
ParticipanteAgora se você quer esse valor fixo na coluna STATUS_TRANS, tu pode criar um script para atualizar esse campo. Se for só para fazer um SELECT sem utilizar esse valor para validar no WHERE, vc nem precisaria dessa coluna na tabela.
23 de novembro de 2010 às 6:05 pm #96972CelyCalat
Participantersrsrs, então , eu acho que agora vc consiga entender melhor o problema.
A minha tabela EMENDAS possui o campo STATUS_TRANS ( e varios outros campos) e na clausula where eu tenho que verificar se este campo é ‘A’ ou ‘B’ dependendo do que vier no parametro P_1.
O comando CASE seria perfeito se pudesse ser como foi montado, pois ele verifica o parametro e dependendo da sua resposta, ele coloca ‘A’ ou ‘B’ nesta coluna do where. Mas como ele não funciona desta maneira, eu não estou conseguindo encontrar uma solução .
Obrigada.
[quote=”Niggaz”:113qjnmm]É, eu dei uma vacilada…rs
No case é errado fazer: then E.STATUS_TRANS = ‘A’, teria que ser: then ‘A’.
Ai no caso essa seria a sua coluna de verificação, ficando assim:
select
case
when P_1 = 1 then 'A'
when P_1 = 2 then 'B'
END verificacao
FROM EMENDAS E
Tenta ai![/quote]
23 de novembro de 2010 às 6:09 pm #96973Niggaz
ParticipanteFoi como eu disse aqui oh:
[quote=”Niggaz”:1h6kr3s8]Agora se você quer esse valor fixo na coluna STATUS_TRANS, tu pode criar um script para atualizar esse campo. Se for só para fazer um SELECT sem utilizar esse valor para validar no WHERE, vc nem precisaria dessa coluna na tabela.[/quote]
Como essa tabela é alimentada? Muitos registros diarios?
23 de novembro de 2010 às 7:17 pm #96975fsitja
ParticipanteNão seria algo assim então:
select *
from emendas e
where e.status_trans = (case when P_1 = 1 then 'A'
else 'B' end);
23 de novembro de 2010 às 7:25 pm #96976CelyCalat
ParticipantePessoal !
Obrigada a todos !!!
Este select de baixo resolveu o problema.
Valeu !!!!
[quote=”fsitja”:3qw4v5zq]Não seria algo assim então:
select *
from emendas e
where e.status_trans = (case when P_1 = 1 then 'A'
else 'B' end);
[/quote] -
AutorPosts
- Você deve fazer login para responder a este tópico.