Background Image
조회 수 28584 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
56 응용개발 패키지 형태로 생성된 JAVA class를 JAVA SP에서 사용하기 손승일 2010.02.26 18375
55 응용개발 전체 레코드 개수 확인하는 SP 김승훈 2015.05.07 14728
54 응용개발 응용프로그램에서 질의 처리시 commit/rollback 처리 문제 admin 2008.11.21 21600
53 응용개발 윈도우 환경에서 PHP 모듈 로드를 못 할 경우 해결법 3 Prototype 2009.11.26 22492
52 응용개발 용량이 큰 데이터를 질의로 저장하는 방법 남재우 2009.11.26 12117
51 응용개발 오라클 to CUBRID로 마이그레이션 수행 시 주의사항 cubebridge 2012.11.12 16642
50 응용개발 그루비로 큐브리드 함수(or 프로시저) 만들기 by 행복개발자(cyberuls) 시난 2009.07.14 18753
49 응용개발 weblogic 8.1 에 CUBRID Connection Pool, DataSource 설정 방법 file 웁쓰 2009.07.01 66306
48 응용개발 utf-8로 저장된 한글이 JAVA SP를 사용하여 읽어 오면 깨져 보일때 손승일 2012.03.10 20800
47 응용개발 tomcat 5.5 버전 이상에서 dbcp(커넥션 풀링) 설정법 admin 2008.11.21 28527
46 응용개발 php에서 serialize/unserialize 사용 시 주의할 점 시난 2009.12.29 31629
45 응용개발 maven에서 CUBRID JDBC Driver 추가하기 file 김승훈 2015.12.09 8947
44 응용개발 loadjava 사용 시 inner class 로딩은 어떻게? admin 2008.11.21 27450
43 응용개발 jdbc에서 질의 플랜정보 보는 방법 손승일 2009.04.15 15842
42 응용개발 jdbc에서 bit 데이터 타입 사용하기 손승일 2009.04.11 15014
41 응용개발 embedded sql 에서 char 사용시 주의 사항 admin 2008.11.21 19008
40 응용개발 cubrid_fetch_all() php 함수로 만들어 사용하기 file 시난 2009.06.30 18619
39 응용개발 cubrid-php module r2.2 이상 버젼에서 configure시에 주의사항 seongjoon 2010.07.20 14007
38 응용개발 Windows에서 32bit 버전의 PHP 설치 후 CUBRID와 연동 실패 시 해결 방법 file 진우진 2016.03.28 4525
37 응용개발 Windows 환경에서 JAVA SP 사용 utf-8 한글 깨짐 해결 file 손승일 2016.07.01 4592
Board Pagination Prev 1 2 3 Next
/ 3

Contact Cubrid

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