728x90
DB는내운명님 | 2013-07-18 18:32:26
db2를 배우고 있습니다.
v 9.7.7. 일때
db2 "decribe select nvl('20130101010101', sysdate) from sysibm.sysdummy1"
결과 는 SQL TYPE 이 VARCHAR로 나왔습니다.
db2 v9.7.4 에서는 SQL TYEP이 TIMESTAMP로 나옵니다.
왜 V9.7.7 에서는 SQL TYPE이 VARCHAR로 나오는 걸까요?
pajama 2013-07-19 02:17:10 | ||
안녕하세요. 테스트를 하다가 저도 혼동이 왔는데요 정리를 해보겠습니다. 테스트 환경은 DB2 9.7, 오라클호환모드 설정했습니다. 우선 예로 들어주신 쿼리 결과는 아래와 같았습니다. ① DB2 9.7.0.0 db2 "select nvl('20130101010101', sysdate) from sysibm.sysdummy1" 1 ------------------- 2013-01-01-01.01.01 ② DB2 9.7.0.8 $ db2 "select nvl('20130101010101', sysdate) from sysibm.sysdummy1" 1 ------------------- 20130101010101 결과가 이렇게 나오니 앞의 것은 TIMESTAMP, 뒤의 것은 VARCHAR가 나올 수 밖에 없었습니다. DB2의 NVL은 COALESCE 함수와 같습니다. 9.5부터 동일하게 사용되었습니다. 아시겠지만 오라클에서는 COALESCE와 NVL의 기능이 좀 다른데요. DB2는 같아서 혼동이 왔습니다. 어쨌든 결과적으로 COALESCE 함수를 썼을때 동일한 결과가 출력됩니다. 그리고 위의 결과 2013-01-01-01.01.01 이것이 나온이유는 대체.. 인포센터를 좀 천천히 읽어보니 인수는 호환가능해야 한다고 합니다. 그리고 필요한 경우 변환이 된다고 합니다. sysdate는 current timestamp와 동일하기 때문에 20130101010101이 2013-01-01-01.01.01과 같은 TIMESTAMP 형식으로 변환이 되는 것 같습니다. 어느것을 기준으로 변환이 되는지는 모르겠습니다. 가능하면 같은 타입을 쓰는 것이 좋겠네요. 예) db2 "select coalesce('20130101010101', cast(sysdate as varchar)) from sysibm.sysdummy1" 그러면 밑에 NVL은 왜 20130101010101이 나왔는지.. 오라클호환모드로 DB가 작동하기 때문에 오라클의 NVL함수와 동일하게 작동하기 때문에 그렇습니다. 사실 인포센터나 Developerworks를 보면 9.7버전 Fix Pack 5부터 오라클호환모드에서 NVL2 등의 오라클 함수를 지원한다고 되어있는데요. 아마 이시점부터 오라클 방식의 NVL함수도 같이 지원을 하는 것으로 보입니다. Fix Pack 4까지는 오라클 호환모드를 켜도 DB2의 NVL(=COALESCE)함수로 작동하는 것으로 보이고요. 썩 정리가 잘 안된것 같습니다. 제가 잘못 알고 있는 부분은 다른분들께서 알려주시면 좋겠습니다. 참고하세요. - NVL scalar function http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0052627.html - COALESCE scalar function http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0000780.html - DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/ |
728x90
'Db2 > KDUG 2013 Q·A' 카테고리의 다른 글
HADR로 Standby 를 Primary와 다른 OS계정명으로 해도 괜찮나요? (0) | 2013.12.23 |
---|---|
앞의 필드 data를 뒤로 (0) | 2013.12.23 |
DB2 의 Database 를 C# 소스 내에서 생성 할수 있나요?? (0) | 2013.12.23 |
range partition 인지 여부 (0) | 2013.12.23 |
cursor load 질문 (0) | 2013.12.23 |