Comment faire une instruction NVL (ou DECODE ou CASE) dans une requête SQL Informix SE?

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

  •  22-07-2019
  •  | 
  •  

Question

IBM est très clair sur son moteur Informix Standard Engine, il ne prend en charge ni CASE ni DECODE. " Mettez à niveau vers une nouvelle version " : http://www-01.ibm.com/support/docview.wss?rs=632&context=SSGU5Y&dc=DB560&dc=DB520&uid=swg21189712&loc=en_US_amp;=8 ; lang = fr & amp; rss = ct632db2

Cela n'arrivera jamais!

Alors peut-être que quelqu'un pourrait avoir une idée. Je veux avoir l'équivalent de:

  

Sélectionnez NVL (c1, c2) dans MyTable

Était-ce utile?

La solution

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 - moins généralement:

-- @(#)$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 version CHAR peut être utilisée pour presque tous les types (à l'exception des chaînes de plus de 32 caractères), car SE est très efficace pour la conversion entre types. SE ne prend pas non plus en charge la diffusion explicite - il est raisonnable de supposer que SE ne possède pas beaucoup de SQL après SQL-89.

Autres conseils

Si vous consultez le site IIUG dans la zone de téléchargement, vous Vous y trouverez une collection de routines SPL pour émuler ces fonctions et d’autres. Celui que vous recherchez est la collection appelée "orclproc".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top