Background Image
조회 수 28976 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

CUBRID와 Oralce에서 ''에 대한 사용 시 차이점에 대한 설명을 위해 예제를 이용하여 설명하겠다.


기본적으로 CUBRID에서는 ''(공백)과 NULL을 엄격히 구분하지만 Oralce에서는 ''(공백)과 NULL을 동일하게 사용한다. 이에 따라 발생하는 문제를 예시로 하여 설명하도록 하겠다.


예시를 위한 Sample table과 Data는 아래와 같다.

create table tbl (a int, b char(1));

insert into tbl values(1,'A');

insert into tbl values(2,'B');

insert into tbl values(1,'C');

insert into tbl values(4,'');

insert into tbl values(5,NULL);


위의 입력 데이터를 대상으로 사용할 쿼리는 아래와 같으며 각 쿼리의 결과 값은 CUBRID와 Oralce로 나눠서 설명하도록 하겠다.


예제 1

select max(decode(a,1,b,''))||max(decode(a,2,'+'||b,''))||max(decode(a,3,'+'||b,'')) result from tbl;

=== <Result of SELECT Command in Line 1> ===

  result             
======================
  'C+B'              

☞ 결과가 동일하다. max의 경우 ''보다 b칼럼의 값이 크게 나오기 때문이다. b칼럼에 ''값이 들어가 있다면 위의 쿼리에서는 의미없는 값이므로 무시한다.


예제 2

select min(decode(a,1,b,''))||min(decode(a,2,'+'||b,''))||min(decode(a,3,'+'||b,'')) result from tbl;

CUBRID의 결과

=== <Result of SELECT Command in Line 2> ===

  result             
======================
  ''              

  

Oracle의 결과

RESUL
-----
A+B

☞ 결과가 다르다. CUBRID결과에서 decode로 가져온 칼럼 b의 모든 결과 값이 ''보다 크기 때문에 min함수에 의한 값은 항상 ''이 나오게 되고 모든 값이 ''이므로 최종 결과 값은 ''이 나오게 된다. Oracle의 경우 ''는 NULL로 정의 되고 NULL은 다른 값과 비교 대상이 되지 않는다. 따라서 NULL을 제외한 값들 중 min값을 뽑아 내기 때문에 결과가 다르게 나온다.


예제 3

select min(decode(a,1,b,NULL))||min(decode(a,2,'+'||b,NULL))||nvl(min(decode(a,3,'+'||b,NULL)),'') result from tbl;

CUBRID의 결과

=== <Result of SELECT Command in Line 3> ===

  result             
======================
  'A+B'              


Oracle의 결과

RESUL
-----
A+B

☞ 결과 값이 동일하다. min함수를 이용하여 사용할 때 CUBRID와 Oracle의 결과 값을 동일하게 가져오려면 위와 같이 추가적으로 nvl함수를 사용하여야 한다. nvl로 묶어주는 이유는 CUBRID에서는 ||연산에 NULL이 연산되면 모든 값은 NULL이 되기 때문이다. 이는 Oracle을 제외한 대부분의 DBMS에서의 방식과 동일하다.


예제 4

select max(b) from tbl;
select min(b) from tbl;

CUBRID의 결과

=== <Result of SELECT Command in Line 13> ===

  max(b)             
======================
  'C'                

...

  min(b)             
======================
  ' '                

Oracle의 결과

MAX
----
C


MIN
----
A

☞ 위의 결과 값을 보면 ''에 대한 CUBRID와 Oracle의 차이를 확연히 알 수 있을 것이다. CUBRID에서 ''(공백)을 사용할 때 Oracle에서 사용하는 것과 동일한 생각에서 사용한다면 원하는 결과 값을 얻을 수 없을 것이며 잘못된 계산값을 가져올 수 있게 된다.


* 해당 사항은 Oracle과 타 DBMS의 차이 중 하나로써 ''(공백)문자 사용에 주의를 기울여야 한다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
180 질의작성 여러건의 코드명을 한건으로 조회하는 쿼리입니다. 1 권호일 2012.03.30 11149
179 응용개발 utf-8로 저장된 한글이 JAVA SP를 사용하여 읽어 오면 깨져 보일때 손승일 2012.03.10 21268
178 마이그레이션 MySQL에서 사용하는 스키마 변환시 주의 사항 정만영 2012.03.02 13590
177 마이그레이션 오라클 to CUBRID로 마이그레이션 수행 시 주의사항 정만영 2012.03.02 21342
176 응용개발 Weblogic 10.0 사용시 JDK 1.5를 사용한 JDBC 드라이버 사용시 주의사항. cubebridge 2012.02.22 52290
175 응용개발 CUBRID에서 SQL힌트와 주석을 쓸 때 순서. cubebridge 2012.01.11 13846
174 기타 CUBRID csql -i 옵션 사용시 주의 사항 이용미 2011.12.22 9460
173 질의작성 오라클의 order by 시 first와 last 대체 사용법 file 이용미 2011.12.22 20478
172 운영관리 CUBRID 4.0 버전 IP/db_user 접속 제한 추가 기능 이용미 2011.12.09 9534
171 운영관리 CUBRID 4.0 서버 재부팅 후 CUBRID Tray 기동문제 해결방법 정만영 2011.08.31 12658
170 운영관리 큐브리드 + 아파치 + php 설치 및 연동 1 하하보이 2010.12.15 22206
169 응용개발 CUBRID R3.0부터 JDBC를 사용하는 응용에서 charset 설정 방법이 변경되었네요. 손승일 2010.12.02 19977
168 운영관리 windows 환경에서 Manager 접속이 되지 않는 경우 처리 방안 남재우 2010.11.26 14705
» 응용개발 CUBRID와 Oracle에서의 ''(공백)의 차이 비교 cubebridge 2010.10.01 28976
166 질의작성 데이터 존재하면 update, 존재하지 않으면 insert 방법(ON DUPLICATE KEY UPDATE) 손승일 2010.08.11 38395
165 응용개발 cubrid-php module r2.2 이상 버젼에서 configure시에 주의사항 seongjoon 2010.07.20 14321
164 CUBRID 매니저 CUBRID HA 또는 복제를 사용하는 경우 CUBRID 매니저를 통한 테이블, 컬럼 등 생성 금지 3 손승일 2010.07.01 17818
163 응용개발 CUBRID에서 CHAR와 NCHAR의 차이점 cubebridge 2010.07.01 21751
162 응용개발 PHP에 CUBRID 모듈 추가시 모듈이 로드되지 않는 문제에 대한 해결 방안 하나입니다 남재우 2010.07.01 16918
161 질의작성 function based index 대체 방법 남재우 2010.07.01 13722
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
/ 14

Contact Cubrid

영업문의 070-4077-2112 / 기술문의 070-4077-2113 / 대표전화 070-4077-2110 / Email. contact_at_cubrid.com
Contact Sales