Informix SE SQL 쿼리 내에서 NVL (또는 Decode 또는 Case) 명령문을 수행하는 방법은 무엇입니까?

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

  •  22-07-2019
  •  | 
  •  

문제

IBM은 그의 Informix 표준 엔진에서 매우 명확하며 케이스 나 디코딩을 지원하지 않습니다. "새 버전으로 업그레이드하십시오": http://www-01.ibm.com/support/docview.wss?rs=632&context=ssgu5y&dc=db560&dc=db520&uid=swg21189712&loc=en_us&cs=utf-8&rsssss=ct632db2

결코 일어나지 않을 것입니다!

그래서 누군가가 아이디어를 가질 수있을 것입니다. 나는 그와 동등한 것을 원한다 :

mytable에서 NVL (C1, C2)을 선택하십시오

도움이 되었습니까?

해결책

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;

SE는 유형간에 변환하는 데 매우 능숙하기 때문에 Char 버전은 거의 모든 유형 (서면으로 32보다 긴 문자열 제외)에 사용할 수 있습니다 (32보다 긴 문자열 제외). SE는 명시 적 주조를 지원하지 않습니다. SE가 SQL-89를 지나서 SQL이 많지 않다고 가정하는 것이 안전합니다.

다른 팁

당신이 IIUG 사이트 다운로드 영역에서는 이러한 기능과 다른 기능을 모방하기위한 SPL 루틴 모음을 찾을 수 있습니다. 당신이 후에 특정한 것은 "orclproc"라는 컬렉션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top