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의 차이 중 하나로써 ''(공백)문자 사용에 주의를 기울여야 한다.


  1. csql 데이터 입력방법

    Date2009.06.09 Category운영관리 By정만영 Views213302
    Read More
  2. CUBRID vs MySQL vs ORACLE SQL 타입별 비교

    Date2013.07.12 Category마이그레이션 By정만영 Views69158
    Read More
  3. weblogic 8.1 에 CUBRID Connection Pool, DataSource 설정 방법

    Date2009.07.01 Category응용개발 By웁쓰 Views66306
    Read More
  4. WHERE 조건에서 다중 컬럼 IN절 처리 최적화 방법 (cubrid + ibatis)

    Date2015.08.21 Category응용개발 By이상신 Views55133
    Read More
  5. Weblogic 10.0 사용시 JDK 1.5를 사용한 JDBC 드라이버 사용시 주의사항.

    Date2012.02.22 Category응용개발 Bycubebridge Views51957
    Read More
  6. 타 DBMS를 CUBRID로 마이그레이션 시 varchar,char 컬럼 사이즈 관련

    Date2010.07.01 Category마이그레이션 By손승일 Views38024
    Read More
  7. 데이터 존재하면 update, 존재하지 않으면 insert 방법(ON DUPLICATE KEY UPDATE)

    Date2010.08.11 Category질의작성 By손승일 Views37999
    Read More
  8. 예약어를 테이블명이나 컬럼명으로 사용시

    Date2008.11.21 Category질의작성 Byadmin Views37421
    Read More
  9. JDBC 사용시 SQL 로깅 - p6spy 사용

    Date2009.07.01 Category응용개발 By웁쓰 Views35999
    Read More
  10. 좀비 프로세스 일괄 삭제하기

    Date2009.12.12 Category기타 Byjanus Views34909
    Read More
  11. CUBRID AUTO_INCREMENT 컬럼 MySQL LAST_INSERT_ID() 대체 방법

    Date2009.12.22 Category응용개발 By손승일 Views33235
    Read More
  12. CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점

    Date2012.09.18 Category운영관리 Bycubebridge Views33157
    Read More
  13. MySQL의 limit 명령어 처리

    Date2008.11.21 Category마이그레이션 Byadmin Views32685
    Read More
  14. Java SP사용시 JNI_CreateJavaVM 에러메시지 해결 방법

    Date2009.07.15 CategoryCUBRID 매니저 Byseongjoon Views32043
    Read More
  15. php에서 serialize/unserialize 사용 시 주의할 점

    Date2009.12.29 Category응용개발 By시난 Views31628
    Read More
  16. CUBRID 사용시 방화벽 설정

    Date2008.11.21 Category운영관리 Byadmin Views30995
    Read More
  17. CUBRID 하위버젼에서 CUBRID2008로의 업그레이드 방법

    Date2008.12.06 Category마이그레이션 By남재우 Views30154
    Read More
  18. 큐브리드 사용포트 정리

    Date2009.06.19 Category운영관리 By정만영 Views29775
    Read More
  19. CUBRID DB 내의 auto_increment 값을 초기화 하자.

    Date2009.10.28 Category질의작성 By손승일 Views29732
    Read More
  20. CUBRID와 Oracle에서의 ''(공백)의 차이 비교

    Date2010.10.01 Category응용개발 Bycubebridge Views28583
    Read More
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