Decode com mais de uma linha de comando apos condição

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
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Senhores, estou com dúvidas de como fazer uma coisa aparentemente "simples", agradeço se puderem me ajudar. Segue abaixo:

Dentro de um bloco condicional tradicional como o "IF THEN ELSE" por exemplo, caso uma condição seja verdadeira podemos executar um ou mais comandos, assim como também se for negativa.

Selecionar tudo


IF <CONDIÇÃO> THEN
 <COMANDO 1>
 <COMANDO 2>
 <COMANDO 3>
ELSE
 <COMANDO 1>
 <COMANDO 2>
 <COMANDO 3>
END IF;

Agora no caso do DECODE eu não consigo executar mais de um comando por condição? Algo que eu imaginaria ser mais ou menos assim:

Selecionar tudo


* Sessão "viagem":

[code]

DECODE(FORMA_PAGTO, -1, 'PRAZO' AND PGTO_PRAZO AND PGTO_VISTA = 0, 
		     0, 'VISTA' AND PGTO_VISTA AND PGTO_PRAZO =0)

Ou senão algo parecido com isso:

Selecionar tudo


CASE
   WHEN (DECODE(FORMA_PAGTO, -1, 'PRAZO', 0, 'VISTA') AS MODALIDADE 
   THEN DECODE(MODALIDADE, -1, PGTO_VISTA, 0, PGTO_PRAZO)
END AS pagamento

[/code]

A situação é a seguinte, eu tenho que verificar em uma tabela de pagamentos se a forma de pagamento foi feita a vista ou a prazo, também tenho duas colunas PGTO_VISTA e PGTO_PRAZO, caso o pagamento tenha sido feito a prazo o campo PGTO_PRAZO deverá aparecer com o seu valor e o PGTO_VISTA, deverá aparecer zerado e vice e versa, caso o pagamento tenha sido efetuado a vista o campo PGTO_VISTA tem que exibir o valor da compra e por sua vez o PGTO_PRAZO deverá aparecer com zero.

A minha dúvida é, que eu tenho que exibir os dois campo no resultado do select, porém esses dependem da condição de um terceiro que influenciará no valor que será impresso dos campos anteriores
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

O caso acima é diferente de eu testar uma condição e imprimir um campo o outro, além disso, tenho que manipular o valor que será exibido de um campo, dependendo da condição!
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

uma solução seria fazer o case/decode duas vezes, uma para cada campo que você precisa,

:D
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Sabia que eu ia me sentir um "estúpido" depois que visse a resposta! rs... Isto que é querer gostar de complicar... E que na minha cabeça eu deveria tratar tudo em uma mesma condição.

Muito obrigado.

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

Sua cabeça está certa, quanto mais simples ficar melhor, com certeza, mas as vezes pode acabar até complicando demais,

procura deixar todos em sequencia pra o codigo ficar mais organizado,

pode ate ser que tem tenha alguma forma de fazer, mas...

;)
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante