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

단축키

Prev이전 문서

Next다음 문서

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

 

(CUBRID 8.4.0 이상 버전 기준, 2012/02/05)

1. derived table 이름의 명시

 

ORACLE의 경우 필요한 경우를 제외하고는 derived table 명을 생략해도 문제가 없으므로 일반적으로 사용을 잘 하지 않는데

 

비해 CUBRID 는 반드시 명시해주어야 한다.

           

ORACLE

select * from (select sysdate from dual)

CUBRID

select * from (select sysdate from dual) tbl

 

 

2. delete 질의에 대하여 from 생략

 

CUBRID에서 delete질의에 대하여 from을 생략할 경우 Syntax에러가 발생하므로 수정이 필요하다.

           

ORACLE

delete tbl where ...

CUBRID

delete from tbl where ...

 

 

3. connect by 사용시 수정

connect by 사용시 start with 가 뒤에 올 경우 ORACLE 에서는문제없으나CUBRID 에서는 에러발생하므로

 

start with connect by보다 먼저나와야 한다.

                 

ORACLE

select * from a connect by prior id = pid start with id = 1

CUBRID

select * from a connect by prior id = pid start with id = 1
--> ERROR: syntax error, unexpected START_

select * from a start with id = 1 connect by prior id = pid

 

 

4. order by  NULL 의 순서

 

order by  NULL의 값이 CUBRID는 제일 작은 값이나 ORACLE 은 제일 큰 값이므로 검색 결과 순위가 다르다.

 

CUBRID 8.4.1 버전 이하에서는 ORACLE처럼 order by ... nulls first, order by ... nulls last 를 지원하지 않으므로주의한다.

          

ORACLE

select id from a order by id  결과 순서 : 1, 2, 3, ..., NULL 
select id from a order by id nulls first : NULL, 1, 2, 3, ...

CUBRID

select id from a order by id  결과 순서 : NULL, 1, 2, 3, ...

 

 

 

5. ORACLE에서의 index 힌트

 

A. ORACLE에서는 select /*+ <테이블명 또는 alias> <인덱스명> */ 형태의 인덱스 힌트 기능이 있으며, CUBRID using index 문과

 

기능이 유사하다다만, CUBRID 예전 버전(8.3.x이하)버전의 경우에는 JOIN문에서 usingindex 뒤에 인덱스 명을 지정하지 않는 경우,

 

해당 테이블에 대해 full scan이 일어나므로반드시 각각의 테이블에 대한 인덱스명을 지정해주어야 한다.

                 

ORACLE

select /*+ tbl ix_tbl01 */ from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j
ix_tbl01 
 tbl 검색시 사용하고, tbl2  대하여는 optimizer  알아서 선택.

CUBRID 8.2.x~8.3.x버전

select from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j
using index tbl.ix_tbl01, tbl2.
ix_tbl2_j
ix_tbl01 
 tbl 검색시 사용하고, tbl2  대하여는 full scan 일어나므로 tbl2 대한 인덱스도 반드시 지정해주어야 한다.

CUBRID 8.4.0 이상 버전

select from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j
using index tbl.ix_tbl01;
ix_tbl01 
 tbl 검색시 사용하고, tbl2  대하여는 optimizer  알아서 선택.

 

B. ORACLE에서 select /*+<INDEX_DESC> ( <테이블명 또는 alias> <인덱스명> ) */ 형태의 내림차순 인덱스 힌트 기능이 있다.

 CUBRID에서는 /*+USE_DESC_IDX*/ 힌트와 using index 문을 결합하여 사용하여야 한다.

ORACLE

select /*+ INDEX_DESC(tbl ix_tbl01) */ from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j

CUBRID 8.2.x~8.3.x버전

select /*+ USE_DESC_IDX */ from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j
using index tbl.ix_tbl01, tbl2.
ix_tbl2_j

CUBRID 8.4.0 이상 버전

select /*+ USE_DESC_IDX */ from tbl, tbl2
where tbl.i = 1 and tbl.j = tbl2.j
using index tbl.ix_tbl01
;

 

C. ORACLE에서는 LEADING 힌트를 제공하지만, CUBRID에서는 이를 지원하지않는다.

대신, /*+ORDERED*/ 힌트를 사용하여 수정할수 있다.

 

6. 테이블 생성시 컬럼 정보 뒤에 constraint 삽입

CUBRID foreign key 지정할 때 ORACLE 처럼 "constraint fk_id ..." 절을 사용할 수 없고컬럼 타입 다음에

 

“foreign key references”절을사용하여야 한다.

ORACLE

create table tbl (id int constraint pk_id primary key); 
create table tbl2 (id int constraint fk_id references tbl(id));

CUBRID

create table tbl (id int constraint pk_id primary key); 
create table tbl2 (id int foreign key references tbl(id));

 

 

 

7. 스키마 생성시 소유자 지정

 

CUBRID은 스키마 생성문에서 직접 소유자를 지정할 수 없고, GRANT문을사용하여 다른 사용자에게 테이블 권한을 부여하여야 한다

 

, ORACLEcreate tableusera.tbl 문이 실행은 되지만실제 소유자는 현재 데이터베이스에 로그인한 사용자이지 usera 아니다.

 

A. 에러는 나지않지만 GRANT문을 실행하여야 테이블에 대한 사용자 권한을 부여할 수 있다.

ORACLE

sys user 로그인
create table usera.tbl ( ...
소유자는 usera

CUBRID

dba 유저로 로그인
create table usera.tbl (...
소유자는 dba.

GRANT ALL PRIVILLEGES ON tbl TO usera;

usera에게 tbl 대한 모든 권한을 부여해야 .

 

 

B. 인덱스 생성시에는에러

ORACLE

sys user 로그인
create index usera.idx on usera.tbl ( ... 
소유자는 usera

CUBRID

dba 유저로 로그인 
create index usera.idx on usera.tbl ( ...

--> 에러 발생함테이블 소유자가 인덱스 소유자가 되므로인덱스 권한을 별도로 부여할  없음 
create index idx on usera.tbl ( ...

--> OK

 

 

8. row_number(), rank(), over() 함수 - CUBRID 9.0에서 지원

CUBRID에서는 row_number(), rank(), over()함수를 지원하지 않으므로질의수정을 하여야 한다.

[row_number() 함수]

 

 

[rank() 함수]

[over() 함수] - count-over, min-over, max-over, row_number-over, rank-over

ORACLE

select a, id, count(*) over() from tbl where a>0 and a<101;

CUBRID

8.4.1 이하 버전

select a, id, cnt from tbl, (select count(*) from tbl where a>0 and a<101) t(cnt) where a>0 and a<101;

 

 

9. ORACLE의 mergeinto  : 조건에 따라 insert 또는 update를 수행하면서 테이블 동기화 수행 - CUBRId 9.0에서 지원

CUBRID에서는 이를지원하지 않으므로, insert문이나 replace문으로질의를 수정하여야 한다.

     

ORACLE

MERGE INTO t_Target A
using
(
select key1, key2, value1, value2 
from t_Base
where key1 = 'abc' 
B
ON (A.key1 = B.key1 and A.key2 = B.key2)
WHEN MATCHED THEN 
update set 
A.value1 = B.value1,
A.value2 = B.value2
WHEN NOT MATCHED THEN 
insert (A.key1 , A.key2 , A.value1, A.value2)
values (B.key1 , B.key2, B.value1, B.value2)

 

 

 

10. SYS_GUID()  함수

 

32 bytes 의 중복되지않는 랜덤한 문자열 제공 함수이며, CUBRID에서는 지원하지 않으므로 질의 수정이 필요하다.

    

ORACLE

sleect SYS_GUID() from dual;
SYS_GUID() 
--------------------------------
B4CBD3E9BEA52132E040007F01003B9D

 

 

11. select … for update wait 10

ORACLE에서 해당레코드에 write lock 을 선점 후 select 해주는기능이며, CUBRID에서는 응용하여 처리해야 한다.

     

ORACLE

select id from tbl for update wait 10

write lock  잡기 위해 10초동안 기다림. 10 초과시 에러.
update tbl set id = ...


큐브리드 공부하기 카페 참조: http://cafe.naver.com/studycubrid/889

 


  1. CUBRID PHP 드라이버 빌드와 연동방법

    Date2018.03.07 Category응용개발 By정만영 Views3740
    Read More
  2. CUBRID 와 DBCP의 관계

    Date2016.12.14 Category응용개발 By엄기호 Views2768
    Read More
  3. Windows 환경에서 JAVA SP 사용 utf-8 한글 깨짐 해결

    Date2016.07.01 Category응용개발 By손승일 Views4582
    Read More
  4. Windows에서 32bit 버전의 PHP 설치 후 CUBRID와 연동 실패 시 해결 방법

    Date2016.03.28 Category응용개발 By진우진 Views4514
    Read More
  5. CUBRID DB에서 critical section 정보 출력하기

    Date2015.12.31 Category응용개발 By주현 Views4552
    Read More
  6. CUBRID HA 제약 사항 및 확인 방법

    Date2015.12.29 Category응용개발 By손승일 Views5293
    Read More
  7. maven에서 CUBRID JDBC Driver 추가하기

    Date2015.12.09 Category응용개발 By김승훈 Views8902
    Read More
  8. WHERE 조건에서 다중 컬럼 IN절 처리 최적화 방법 (cubrid + ibatis)

    Date2015.08.21 Category응용개발 By이상신 Views55065
    Read More
  9. JAVA SP 사용 시 로그 처리 방법

    Date2015.06.03 Category응용개발 By손승일 Views8570
    Read More
  10. 전체 레코드 개수 확인하는 SP

    Date2015.05.07 Category응용개발 By김승훈 Views14714
    Read More
  11. CUBRID-PHP-Driver 연동가이드

    Date2012.11.13 Category응용개발 Bycubebridge Views17135
    Read More
  12. 오라클 to CUBRID로 마이그레이션 수행 시 주의사항

    Date2012.11.12 Category응용개발 Bycubebridge Views16635
    Read More
  13. utf-8로 저장된 한글이 JAVA SP를 사용하여 읽어 오면 깨져 보일때

    Date2012.03.10 Category응용개발 By손승일 Views20783
    Read More
  14. Weblogic 10.0 사용시 JDK 1.5를 사용한 JDBC 드라이버 사용시 주의사항.

    Date2012.02.22 Category응용개발 Bycubebridge Views51957
    Read More
  15. CUBRID에서 SQL힌트와 주석을 쓸 때 순서.

    Date2012.01.11 Category응용개발 Bycubebridge Views13307
    Read More
  16. CUBRID R3.0부터 JDBC를 사용하는 응용에서 charset 설정 방법이 변경되었네요.

    Date2010.12.02 Category응용개발 By손승일 Views19631
    Read More
  17. CUBRID와 Oracle에서의 ''(공백)의 차이 비교

    Date2010.10.01 Category응용개발 Bycubebridge Views28582
    Read More
  18. cubrid-php module r2.2 이상 버젼에서 configure시에 주의사항

    Date2010.07.20 Category응용개발 Byseongjoon Views14007
    Read More
  19. CUBRID에서 CHAR와 NCHAR의 차이점

    Date2010.07.01 Category응용개발 Bycubebridge Views21315
    Read More
  20. PHP에 CUBRID 모듈 추가시 모듈이 로드되지 않는 문제에 대한 해결 방안 하나입니다

    Date2010.07.01 Category응용개발 By남재우 Views16556
    Read More
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