Come eseguire un'istruzione NVL (o DECODE o CASE) all'interno di una query SQL Informix SE?

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

  •  22-07-2019
  •  | 
  •  

Domanda

IBM è molto chiara sul suo motore standard Informix, non supporta né CASE né DECODE. " Esegui l'upgrade a una nuova versione " : 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 = it & amp; rss = ct632db2

Non accadrà mai!

Quindi forse qualcuno potrebbe avere un'idea. Voglio avere l'equivalente di:

  

Seleziona NVL (c1, c2) da MyTable

È stato utile?

Soluzione

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;

Oppure - meno in generale:

-- @(#)$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 versione CHAR può essere utilizzata per quasi tutti i tipi (tranne le stringhe più lunghe di 32, come scritto) perché SE è molto bravo nella conversione tra tipi. Anche SE non supporta il cast esplicito - è lecito ritenere che SE non abbia gran parte di SQL oltre SQL-89.

Altri suggerimenti

Se dai un'occhiata al Sito IIUG nell'area download, troverai una raccolta di routine SPL per emulare queste funzioni e altre. Quello specifico che stai cercando è la raccolta chiamata " orclproc " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top