본문 바로가기
Project/myweb_JAVA

00. myweb프로젝트 관련, Maria DB와 Oracle DB 쿼리 차이

by 개발개발빈이 2022. 5. 21.

방명록 쿼리를 예시로 한 Maria DB와 Oracle DB 쿼리 차이

큰 차이는 없지만, 

데이터 타입, insert문, 페이징에서 다소 차이가 존재함

방명록 페이징 넣어보려다가 MariaDB버전으로 수정했던 DAO 한번 날려먹고

앞으로 cefe24에 DAO올릴 때 까먹지 말라고 정리해본다..

 

데이터 타입은 예전에 블로그에 정리해둠

https://binscode.tistory.com/51?category=1052619

 

INSERT에서 차이

 

-Maria DB(cafe24)

INSERT INTO tb_gbook(gname, content, passwd, ip, grpno, regdt)
VALUES(?, ?, ?, ?, (SELECT ifnull(max(gbookno),0)+1 FROM tb_gbook AS TB), now())

 

-Oracle DB(myWeb)

INSERT INTO tb_gbook(gbookno, gname, content, passwd, ip, grpno)
VALUES(gbook_seq.nextval, ?, ?, ?, ?, (SELECT NVL(MAX(gbookno), 0)+1 FROM tb_gbook));

 

-차이점

   ① 오라클DB는 PK인 gbookno을 시퀀스를 이용해 gbook_seq.nextval로 처리하지만, 

       마리아DB는 gbookno  INT  NOT NULL AUTO_INCREMENT 

       이런식으로 테이블을 생성할 때 자동증가하도록 처리한다

   ② 현재시스템 날짜 정보를 가져오는 법

        오라클DB는 sysdate를 이용해서 default값으로 설정하거나, 쿼리문에 value로 설정하지만

        마리아 DB는 now() 함수를 이용한다


페이징에서 차이

 

-Maria DB(cafe24)

SELECT max(grpno) as maxGno, min(grpno) as minGno
FROM(
     SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent, @RNO := @RNO + 1 AS r
     FROM(
          SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent
          FROM tb_gbook WHERE indent=0 ORDER BY gbookno DESC)A, (SELECT  @RNO := 0)B 
     )C
WHERE r>=1 AND r<=5

 

-Oracle DB(myWeb)

SELECT max(grpno) as maxGno, min(grpno) as minGno
FROM (
	SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent, rownum as r
	FROM (
		SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent
		FROM tb_gbook WHERE indent=0 ORDER BY gbookno DESC
		)
	)
WHERE r>=6 AND r<=10;

 

-차이점

  ① 오라클DB에서 페이징할 때 쓰이는 rownum은 오라클 DB에서만 쓰이는 모조칼럼,

       마리아 DB에서는 대신 @RNO := @RNO + 1 AS r 이런 식으로 처리해준다

       (오라클DB rownum 관련 포스팅 : https://binscode.tistory.com/60 )

  ② 오라클DB에서는 서브쿼리된 테이블의 alias를 생략해도 되지만, 마리아DB에서는 안된다고 함

       그래서 서브쿼리로 들어간 3개의 테이블에 각각 A, B, C로 alias부여해줌

댓글