Wie eine NVL (oder DECODE oder CASE) Anweisung innerhalb einer Informix SE SQL-Abfrage zu tun?

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

  •  22-07-2019
  •  | 
  •  

Frage

IBM ist sehr klar auf seine Informix Standard-Motor, ist es nicht keinem der beiden Fälle noch DECODE nicht unterstützt. "Bitte aktualisieren Sie auf eine neue Version": 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

Es wird nie passieren!

Vielleicht könnte jemand eine Idee. Ich möchte das Äquivalent haben:

  

Wählen Sie NVL (c1, c2) von MyTable

War es hilfreich?

Lösung

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;

oder - weniger allgemein:

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

Die CHAR-Version kann für fast jede Art verwendet wird (mit Ausnahme von Strings länger als 32, wie geschrieben), da SE bei der Umwandlung zwischen Typen sehr gut. SE nicht explizit Casting unterstützen, entweder -. Es ist sicher anzunehmen, dass SE nicht viel von SQL letzten SQL-89 hat

Andere Tipps

Wenn Sie einen Blick auf die IIUG Website im Bereich Downloads, Sie ‚ll eine Sammlung von SPL-Routinen finden sich diese und andere Funktionen zu emulieren. Die spezifische sind Sie nach ist die Sammlung namens „orclproc“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top