PL/SQL IIF , EXISTE ?

VILMARBR 02/03/2012 19:13:28
#396324
PL/SQL IIF , EXISTE ?
Se sim, como é ?
googleei mas não achei

grato
AJSO 02/03/2012 19:41:12
#396325
Caro VILMARBR

Sim para a maioria dos SGBD se for para ORACLE

DECLARE

a NUMBER;

b NUMBER;

BEGIN

SELECT e,f INTO a,b FROM T1 WHERE e>1;

IF b=1 THEN

INSERT INTO T1 VALUES(b,a);

ELSE

INSERT INTO T1 VALUES(b+10,a+10);

END IF;

END;

Isso é bem básico pode ficar dentro de uma procedure. IF dentro de UM BEGIN


Boa Sorte
VILMARBR 02/03/2012 19:54:33
#396327
ISTO NAO
falo do IIF do VB 6, SE do excel
checa valor verdade, valor true, valor false

era para jogar direto numa linha de insert por exemplo, sempre precisar tratar com if antes, por que isto eu já fiz....

vlw mesmo assim
JSFF77 02/03/2012 20:16:35
#396330
Boa noite.

Amigo,

Acho que terá que usar CASE...END nesse caso.

Veja se esse conteúdo pode lhe ajudar: Oracle/PLSQL: Case Statement

Até mais.


JSFF77
www.visualgria.com.br

RICART 02/03/2012 22:01:35
#396351
Resposta escolhida
Vc pode utilizar assim:

case when (seucampo>=algumacoisa) then [ô]O resultado aqui, valor ou string, data, etc[ô]
when (SEUCAMPO IN (1,2,3,4,5)) then [ô]O outro resultado aqui[ô] else [ô]Se nenhum for verdadeiro aqui[ô] end NomeCampo

Vc pode fazer várias condições por vez e comparações de formas diferentes, sendo que a sitaxe é sempre:
Case When (Condicao1) then [ô]Retorno1[ô]
Case When (Condicao2) then [ô]Retorno2[ô]
Case When (Condicao3) then [ô]Retorno3[ô]
......
Case When (CondicaoN) then [ô]RetornoN[ô] else [ô]Resultado se nenhum for Verdadeiro[ô] end

Você pode colocar mais de uma verificação por condição: when (a.valor>=b.precofinal and a.valor<b.precovenda) then 1


Você precisa ter como resultados um mesmo tipo de dado, ou seja, os Retornos têm que estar no mesmo tipo de dados.

Agora, há situaões onde é mais vantajoso utilizar o DECODE. Esse comando serve para comparar um determinado valor OU STRING com uma série de valores OU STRINGS,sempre que ocorrer de ser igual ao proposto, haverá o retorno correspondente:
Tipo assim: DECODE(a.Status,COMPARACAO1,RETORNO1,COMPARACAO2,RETORNO2,COPARACAO3,RETORNO3,RETORNOPADRAO)

EX: Se um determinado campo tiver como valores possíveis: 1 que significa ativo, 2 que significa inativo e 3 que significa indiferente, e vc não pode ou não quer relacionar com uma tabela, mas precisa retornornar o significado do valor do campo como string, poderia fazer assim:

decode(status,1,[ô]Ativo[ô],2,[ô]Inativo[ô],3,[ô]Indiferente[ô],[ô]Nao Identificado[ô])

Veja que se fosse utilizar o Case When, haveria uma quantidade bem maior de SQL:
case when (STATUS=1) THEN [ô]ATIVO[ô]
WHEN (STATUS=2) THEN [ô]INATIVO[ô]
WHEN (STATUS=3) THEN [ô]INDIFERENTE[ô] ELSE [ô]NAO IDENTIFICADO[ô] END







VILMARBR 03/03/2012 07:17:51
#396358
decode, isto ae, gostei
grato
Tópico encerrado , respostas não são mais permitidas