¿Cómo hacer una declaración NVL (o DECODE o CASE) dentro de una consulta SQL Informix SE?

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

  •  22-07-2019
  •  | 
  •  

Pregunta

IBM es muy claro en su Informix Standard Engine, no admite ni CASE ni DECODE. " Actualice a una nueva versión " : 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 = es & amp; rss = ct632db2

¡Nunca sucederá!

Entonces, tal vez alguien podría tener una idea. Quiero tener el equivalente de:

  

Seleccione NVL (c1, c2) de MyTable

¿Fue útil?

Solución

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;

O - menos generalmente:

-- @(#)$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;

La versión CHAR se puede usar para casi cualquier tipo (excepto cadenas de más de 32, como está escrito) porque SE es muy bueno para convertir entre tipos. SE tampoco admite la conversión explícita: es seguro asumir que SE no tiene mucho de SQL pasado SQL-89.

Otros consejos

Si echa un vistazo al Sitio IIUG en el área de descargas, usted Encontrará una colección de rutinas SPL para emular estas funciones y otras. La específica que busca es la colección llamada "orclproc".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top