Memory Drive

반응형

DB2 에서 Connect by 쿼리를 사용하기 위하여

 

db2set DB2_COMPATIBILITY_VECTOR=ORA

db2stop

db2start

 

명령을 이용하여 호환성 모드를 활성화 시키면...

 

가장 쉽게 접하는 문제점이..

 

CASE WHEN THEN 문과 DECODE 에서 사소한 문제점이 발생된다.

 

단일 형태의

CASE 컬럼 WHEN '1' THEN '값' ELSE '값' END  AS 컬럼명

DECODE(컬럼,'값','값2') AS 컬럼 

 

일때는 문제가 없으나

다수의 CASE WHEN .... WHEN THEN ... WHEN THEN ... / DECODE 일경우에는

SELECT
    DECODE(cond, '1','일이다1123878798798791', '2', '기타') || NAME
FROM (
SELECT '1' AS COND, '정' AS name FROM DUAL
union
SELECT '2' AS COND, '김' AS name FROM DUAL
)

 

위의 결과가 호환성 옵션 활성화 하기전 DB2에서는 (9.7 이라 DECODE 가능) 일체의 공백이 없이 붙여서 CONCATE 되지만....

 

결과....

기타김
일이다1123878798798791정

 

오라클 호환 옵션을 활성화 한뒤에 실행하게 되면

 

기타                           김
일이다1123878798798791정

으로 출력이 된다.

 

 

즉 제일 길이가 긴 DECODE/CASE WHEN의 결과값 길이의 SIZE를 따라 감...

 

호환성 옵션을 사용한 이유는 CONNECT BY 를 사용하기 위함이므로

db2set DB2_COMPATIBILITY_VECTOR=8

 

CONNECT BY 옵션만 활성화 하니 기존의 결과와 같이 나옴...

반응형