-- By Borges, M.A.
-- in Aug-08-2001

DECLARE
 AUX  VARCHAR2(80);
 VAR1 VARCHAR2(80)  DEFAULT 'ASDF ASDFASD';
 VAR2 VARCHAR2(80)  DEFAULT 'ASDF ASDFASDB';
 

  -- Esta é a função que você quer. 
  -- Como você pode ver, não importa a variavel utilizada. O ORACLE 
  -- faz a conversão automáticamente 
  -- O segredo é só trabalhar com char e converter depois   
  FUNCTION DECIDE( COND BOOLEAN, RETURN1 VARCHAR, RETURN2 VARCHAR)
    RETURN VARCHAR2
  AS  
  BEGIN
     IF COND THEN 
        RETURN RETURN1;
     ELSE
        RETURN RETURN2;
     END IF;      
  END;
  
  -- Só retorna uma string
  FUNCTION STR_FUNC
    RETURN VARCHAR2
  AS  
  BEGIN
    RETURN 'STRFUNC';
  END;
  
  -- Só retorna um float
  FUNCTION NUMBER_FUNC
    RETURN NUMBER
  AS  
  BEGIN
    RETURN 1 / 3;
  END;
  

BEGIN
  DBMS_OUTPUT.PUT_LINE(DECIDE( ('A' = 'B'), SYSDATE, USER )); 
  DBMS_OUTPUT.PUT_LINE(DECIDE( ('A' = 'A'), SYSDATE, USER )); 
  DBMS_OUTPUT.PUT_LINE(DECIDE( (11 > 10), 1500, 1600 ));
  DBMS_OUTPUT.PUT_LINE(DECIDE( (1 <> 1), STR_FUNC, NUMBER_FUNC ));
  DBMS_OUTPUT.PUT_LINE(DECIDE( TRUE, 'TRUE', 'FALSE' )); 
END;

> ----- Mensagem original -----
> De:           Marco Aurelio ZERBINI   SP-ESC [SMTP:[EMAIL PROTECTED]]
> Enviada em:           Quarta-feira, 22 de Agosto de 2001 16:58
> Para:         '[EMAIL PROTECTED]'
> Assunto:              RES: [java-list] Alguem sabe usar isso  (  (X >
> Y) ? X : Y ) em um SQL ORACLE ?
> 
> Voce pode utilizar o recurso de functions do Oracle como o exemplo
> abaixo:
> 
> CREATE FUNCTION fullname (firstname varchar(255),
>    lastname varchar(255))
>    RETURNS CHAR(61)
>    -- fullname concatenates the firstname and lastname
>    -- arguments with a single space between.
>    BEGIN
>    DECLARE name CHAR(61);
>    SET name = firstname || ' ' || lastname;
>    RETURN ( name );
> END
> /
> 
> Neste exemplo ele apenas concatena firstname com lastname, mas voce
> pode
> colocar qualquer teste no corpo da funcao.
> 
> Para utilizar a funcao:
> 
> select fullname(first,last) from emp;
> 
> 
> sds
> Marco Zerbini
> 
> 
> 
> > 
> > 
> > > Pessoal
> > >
> > >    Tenho que usar um teste no meu SQL para o Oracle.
> > >    No oracle nao existe (que eu saiba) uma funcao
> > > tipo "IIF" do FoxPro.
> > >    Existe a funcao Decode, mas nao serve por que tenho
> > > que testar (>,<,<=,>=...) e o Decode so testa igualdade.
> > >    Alguem ja criou alguma funcao "Java" no Oracle que
> > > simule um Iff([condicao],[Retorno true],[Retorno false]) ?
> > >    Obs: Os retornos podem ser datas, strings, numeros.
> > >    Existe outra alternativa ?
> > >
> > > Obrigado.
> > >
> > >
> > > ------------------------------ LISTA SOUJAVA 
> > ----------------------------
> > > http://www.soujava.org.br  -  Sociedade de Usuários Java da 
> > Sucesu-SP
> > > dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> > > regras da lista: http://www.soujava.org.br/regras.htm
> > > para sair da lista: envie email para 
> > [EMAIL PROTECTED]
> > > 
> > --------------------------------------------------------------
> > -----------
> > 
> > 
> > _________________________________________________________
> > Do You Yahoo!?
> > Get your free @yahoo.com address at http://mail.yahoo.com
> > 
> 
> ------------------------------ LISTA SOUJAVA
> ---------------------------- 
> http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para
> [EMAIL PROTECTED] 
> ----------------------------------------------------------------------
> ---
> 

------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Responder a