Como fazer uma NVL (ou DECODE ou CASE) declaração dentro de uma consulta Informix SE SQL?

StackOverflow https://stackoverflow.com/questions/1042550

  •  22-07-2019
  •  | 
  •  

Pergunta

IBM é muito clara em seu Motor padrão Informix, ele não suporta nenhum dos casos nem DECODE. "Por favor, atualize para uma nova versão": http://www-01.ibm.com/support/docview.wss?rs=632&context=SSGU5Y&dc=DB560&dc=DB520&uid=swg21189712&loc=en_US&cs=UTF-8&lang=en&rss=ct632db2

Isso nunca vai acontecer!

Então, talvez alguém poderia ter uma idéia. Quero ter o equivalente a:

Selecionar NVL (c1, c2) a partir MyTable

Foi útil?

Solução

CREATE PROCEDURE NVL(a CHAR(32), b CHAR(32) DEFAULT NULL,
                                 c CHAR(32) DEFAULT NULL,
                                 d CHAR(32) DEFAULT NULL,
                                 e CHAR(32) DEFAULT NULL,
                                 f CHAR(32) DEFAULT NULL,
                                 g CHAR(32) DEFAULT NULL)
   RETURNING CHAR(32);
   IF   a IS NOT NULL THEN RETURN a;
   ELIF b IS NOT NULL THEN RETURN b;
   ELIF c IS NOT NULL THEN RETURN c;
   ELIF d IS NOT NULL THEN RETURN d;
   ELIF e IS NOT NULL THEN RETURN e;
   ELIF f IS NOT NULL THEN RETURN f;
   ELSE                    RETURN g;
   END IF;
END PROCEDURE;

Ou - menos geral:

-- @(#)$Id: nvl_int.spl,v 1.1 1996/08/26 18:33:11 johnl Exp $
--
-- nvl_integer: return v1 if it is not null else return v2

CREATE PROCEDURE nvl_integer(v1 INTEGER, v2 INTEGER DEFAULT 0)
    RETURNING INTEGER;

    DEFINE rv INTEGER;

    IF v1 IS NOT NULL THEN
        LET rv = v1;
    ELSE
        LET rv = v2;
    END IF

    RETURN rv;

END PROCEDURE;

A versão CHAR podem ser usadas para quase qualquer tipo (excepto cadeias mais longas do que 32, como escrito) porque SE é muito bom em converter entre tipos. O SE não suporta conversão explícita, ou -., é seguro assumir que SE não tem muito de SQL passado SQL-89

Outras dicas

Se você tem um olhar sobre a IIUG site na área de downloads, você vai encontrar uma coleção de rotinas SPL lá para emular estas funções e outros. Um específico que você está depois é a coleção chamada "orclproc".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top