Oracle 사용방법 비교 정리 feat.MySQL

이형석·2025년 3월 15일

오라클 공부

목록 보기
1/6

그동안 MySQL로 공부했기 때문에 이와 차이점을 통해 Oracle 문법과 기타 사용방법 등을 정리해보려 한다.
아직 고급 문법은 필요한 단계가 아니므로, 우선 간단한 문법만 작성한다.

데이터베이스

1. 데이터베이스 선택

MySQL : USE database_name;
Oracle : ALTER SESSION SET CONTAINER=pdb_name;
* 오라클에서는 pdb라는 개념을 사용(자세한건 검색)

참고
오라클은 MySQL과 달리 사용자 계정으로 데이터베이스를 구분함.
다시 말해 MySQL은 같은 계정으로 여러 데이터베이스를 사용했다면,
오라클은 여러 계정으로 각 계정의 데이터베이스를 사용.

2. PK 자동 생성 (MyBatis의 경우)

MySQL : userGeneratedKey 속성을 이용
Oracle : selectKey 사용

Oracle 예시
테이블

create table Board(
	board_id number primary key,
    title varchar2(30) not null,
    content varchar2(100) not null
    );
create sequence seq_board; --자동증가 값을 가져오기 위한 시퀀스

매퍼 파일

<insert id="insertBoard" parameterType="Board">
  <selectKey keyProperty="boardId" resultType="Long" order="BEFORE">
    select seq_board.nextval from dual
  </selectKey>
  insert into board (board_id, title, content) values (#{board_id}, #{title}, #{name})
</insert>

* 오라클에서 시퀀스값 조회는 from dual이 표준
* insert문을 실행하기 전(order="BEFORE")에 키값(keyProperty="boardId")을 Long타입(resultType="Long")으로 받아옴.
* selectKey 로직에서 Board객체의 id값을 세팅할 때 Board클래스의 Setter 필요

* 참고
오라클 마이바티스에서 PK 자동 생성 : https://sesoc.tistory.com/41
selectKey 각 속성 의미 : https://yookeun.github.io/java/2014/07/11/mybatis-selectkey/

문법

1. 대소문자 구분 여부

MySQL : 대소문자 구분 O
Oracle : 대소문자 구분 X
* 단 따옴표("") 사용 시 구분
ex) "user" 와 "USER"은 다르게 취급

2. Null 치환함수

MySQL : IFNULL(컬럼명, '출력단어')
Oracle : NVL(컬럼명, '출력단어')
* Null Value Logic

3. 문자열 결합

MySQL : CONCAT('문자', '문자', 문자')
Oracle : '문자' || '문자' || '문자'

4. 문자열 자르기

MySQL : SUBSTRING(문자열, 시작위치, 추출갯수)
Oracle : SUBSTR(문자열, 시작위치, 추출갯수)
ex) SUBSTR('abcde', 2, 4)
결과 : bcde

5. 결과 갯수 추출

MySQL : LIMIT 5,10 --정렬 후 수행
Oracle : WHERE ROWNUM > 5 AND ROWNUM <= 10 --정렬 전 수행

* Oracle에서 LIMIT과 동일한 결과를 얻는 예시

SELECT *
  FROM (
        SELECT *
          FROM USERS
        WHERE NAME IN ('KIM')
        ORDER BY AGE
        )
WHERE ROWNUM <= 5;

SELECT절로 한번 감싸서, ROWNUM을 사용

6. 현재 날짜시간

MySQL : NOW()
Oracle : SYSDATE

7. 날짜 포맷

MySQL : DATE_FORMAT(컬럼명, 날짜형식)
Oracle : TO_CHAR(컬럼명, 날짜형식)
* 날짜형식도 다름

오라클 날짜형식
YYYY : 연도
MM : 월
DD : 일
HH24 : 24시간
MI : 분
SS : 초
ex) TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')

* 원하는 요소만 사용 가능
ex) TO_CHAR(SYSDATE, 'YYYYMMDD')

* 문자 삽입을 통해 형식 변형 가능 (- . , / : 등)
ex) TO_CHAR(SYSDATE, 'YYYY-MM-DD')
ex) TO_CHAR(SYSDATE, 'YYYY.MM.DD')

참고 https://kr98gyeongim.tistory.com/100

8. LIKE절로 날짜 검색

생일이 3월인 사람 찾기

MySQL : WHERE DATE_OF_BIRTH LIKE '%03%' --DATE 타입을 자동으로 CHAR로 적용하여 실행
ORACLE : WHERE TO_CHAR(DATE_OF_BIRTH, 'MM') = 3 --직접 CHAR로 변환

9. 문자가 예약어와 겹칠 때

MySQL : `USER` --백틱
Oracle : "USER" --쌍따옴표


프로그래머스 SQL 문제 연습 정리
(MySQL 사용)

profile
금융IT 개발자

0개의 댓글