Background Image
조회 수 28583 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
279 질의작성 synonym에 대하여 김민종 2023.09.07 257
278 질의작성 VALUES 절 활용하기 황영진 2020.05.13 814
277 질의작성 입력된 날자를 이용하여 해당 주차의 모든 날자 구하기 성진 2018.04.10 1108
276 질의작성 JAVA_SP를 이용해서 정규표현식을 이용해서 치환을 하자. file 성진 2017.10.10 1325
275 운영관리 CUBRID 8.2.2 ~ 8.4.x 버전에서 'ALTER SERIAL ... CACHE <cached_num> / NOCACHE' ERROR 해결 방법 주영진 2017.03.08 2161
274 운영관리 윈도우 OS에서 java sp 사용 시 Java VM is not running 해결 방법 정훈 2017.09.04 2229
273 운영관리 CUBRID 브로커와 시스템 메모리 정만영 2019.03.12 2367
272 질의작성 loose index scan을 활용한 효과적인 쿼리 튜닝 방안 박세훈 2017.06.01 2409
271 응용개발 CUBRID 와 DBCP의 관계 엄기호 2016.12.14 2793
270 기타 JBoss 사용 시 statement pooling 설정 손승일 2016.12.16 2924
269 질의작성 테이블 명세서 쿼리 1 성진 2017.08.04 3173
268 질의작성 subquery를 이용한 튜닝예제 file 김창휘 2016.12.27 3322
267 응용개발 CUBRID PHP 드라이버 빌드와 연동방법 정만영 2018.03.07 3763
266 질의작성 Cubrid는 어떤 쿼리를 동일한 쿼리로 판단할까? 이상신 2015.12.30 4010
265 질의작성 스키마 및 인덱스 선언에 따른 최대 용량 산정을 위한 ROW SIZE 확인 성진 2016.03.21 4178
264 운영관리 큐브리드 마스터 소켓 디렉토리 변경방법 정만영 2016.07.05 4218
263 운영관리 cubrid plandump ( plan cache정보확인) file 주현 2015.12.29 4300
262 운영관리 Invalid XASL tree node content 에러 손승일 2016.04.26 4477
261 응용개발 Windows에서 32bit 버전의 PHP 설치 후 CUBRID와 연동 실패 시 해결 방법 file 진우진 2016.03.28 4523
260 마이그레이션 CMT를 이용하여 원본 특정 테이블의 일부 데이터만 가져와 대상 테이블에 넣기 엄기호 2016.01.28 4558
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
/ 14

Contact Cubrid

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