Informix SE SQL 쿼리 내에서 NVL (또는 Decode 또는 Case) 명령문을 수행하는 방법은 무엇입니까?
문제
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"라는 컬렉션입니다.
제휴하지 않습니다 StackOverflow