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
번호 분류 제목 글쓴이 날짜 조회 수
119 응용개발 ODBC 드라이버를 이용한 Prepare 사용하기. seongjoon 2009.06.16 19591
118 마이그레이션 MySQL의 limit 명령어 처리 1 admin 2008.11.21 32686
117 응용개발 MySQL의 Blob타입을 CUBRID로 변환하기 cubebridge 2009.11.18 18859
116 마이그레이션 MySQL에서 사용하는 스키마 변환시 주의 사항 정만영 2012.03.02 13256
115 마이그레이션 MySQL에서 CUBRID로 갈아탈 때 알아야 할 것 cubebridge 2012.11.13 22623
114 마이그레이션 MySQL+XE를 CUBRID+XE로 운영하기 – mysqldump파일과 CMT사용 file cubebridge 2012.11.13 23072
113 마이그레이션 MySQL 테이블 크기 조사하기-공유 주현 2015.12.31 6209
112 CUBRID 매니저 MS949 charset을 CM에서 선택할 수 없는 현상 조치방법 cubebridge 2010.05.17 20544
111 질의작성 MERGE INTO 사용 예제 ( INSERT, UPDATE문을 1개의 쿼리로 실행 ) 권호일 2015.05.01 21266
110 질의작성 LIKE 검색에서 INDEX_SCAN사용 하기 file janus 2009.04.17 21809
109 CUBRID 매니저 Java SP사용시 JNI_CreateJavaVM 에러메시지 해결 방법 file seongjoon 2009.07.15 32043
108 응용개발 Java Data Type의 CUBRID Data Type으로의 변경 Tip cubebridge 2009.06.16 18034
107 응용개발 JDBC 커넥션 스트링에 UTF-8 명시하는법 Prototype 2009.07.03 19020
106 응용개발 JDBC 사용시 SQL 로깅 - p6spy 사용 1 웁쓰 2009.07.01 36003
105 기타 JBoss 사용 시 statement pooling 설정 손승일 2016.12.16 2937
104 질의작성 JAVA_SP를 이용해서 정규표현식을 이용해서 치환을 하자. file 성진 2017.10.10 1335
103 응용개발 JAVA SP를 통해 다른 데이터베이스 연결하는 경우 잊지 말자. 손승일 2009.12.16 17976
102 응용개발 JAVA SP 사용 시 로그 처리 방법 손승일 2015.06.03 8574
101 운영관리 Invalid XASL tree node content 에러 손승일 2016.04.26 4477
100 질의작성 Integer 컬럼의 결과에 + or – 연산을 할 때 주의해야 할 점 웁쓰 2009.12.31 13493
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 14 Next
/ 14

Contact Cubrid

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