如何在Informix SE SQL查询中执行NVL(或DECODE或CASE)语句?

时间:2009-06-25 07:16:13

标签: sql database informix

IBM非常清楚他的Informix标准引擎,它既不支持CASE也不支持DECODE。 “请升级到新版本”: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

永远不会发生!

所以也许有人可以有个主意。我希望有相同的:

  

从MyTable

中选择NVL(c1,c2)

2 个答案:

答案 0 :(得分:3)

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;

或者 - 一般情况下:

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

CHAR版本几乎可以用于任何类型(除了编写的长度超过32的字符串),因为SE非常擅长在类型之间进行转换。 SE也不支持显式转换 - 可以安全地假设SE在SQL-89之后没有太多的SQL。

答案 1 :(得分:2)

如果您查看下载区域中的IIUG Site,您会在那里找到一组SPL例程来模拟这些功能和其他功能。你所追求的具体是名为“orclproc”的集合。