오라클(Oracle DB) 개발 시 반드시 알아야 할 내용 정리
오라클 DB는 MySQL, MSSQL과 같은 관계형 데이터베이스(RDBMS)이지만, 몇 가지 중요한 차이점이 있어.
트랜잭션 처리, SQL 문법, 데이터 타입, 성능 최적화 방식 등이 다르기 때문에 처음 사용할 때 주의해야 해.
1️⃣ 트랜잭션 처리 방식 (AUTOCOMMIT 차이)
- 오라클: 기본적으로 AUTOCOMMIT이 비활성화됨 → 직접 COMMIT을 실행해야 데이터가 저장됨
- MySQL, MSSQL: AUTOCOMMIT이 활성화됨 → INSERT, UPDATE 등을 실행하면 즉시 반영됨
🔹 예제
-- 오라클에서는 COMMIT을 해야 변경 사항이 반영됨
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
COMMIT;
👉 주의할 점: 오라클에서는 ROLLBACK;으로 되돌릴 수 있지만, MySQL/MSSQL에서는 AUTOCOMMIT이 기본적으로 켜져 있어 실수하면 복구가 어려울 수 있음.
2️⃣ 테이블 & 컬럼명 대소문자 구분
- 오라클은 기본적으로 테이블, 컬럼명을 대문자로 저장함.
- 만약 소문자로 사용하고 싶다면 더블쿼테이션(" ")을 사용해야 함.
🔹 예제
CREATE TABLE "users" ( "id" NUMBER, "name" VARCHAR2(50) );
-- 조회 시에도 정확한 대소문자 입력 필요
SELECT * FROM "users"; -- 가능
SELECT * FROM users; -- 오류 발생 (대문자로 자동 변환됨)
👉 권장사항: 더블쿼테이션을 쓰면 관리가 어려워지므로 테이블 및 컬럼명을 대문자로 작성하는 것이 일반적임.
3️⃣ 데이터 타입 차이
오라클은 MySQL, MSSQL과 다르게 VARCHAR 대신 VARCHAR2를 사용해야 하고, 숫자와 날짜 타입도 차이가 있음.
타입 오라클(Oracle) MSSQL MySQL
문자열 | VARCHAR2(50) | VARCHAR(50) | VARCHAR(50) |
숫자형 | NUMBER(10,2) | DECIMAL(10,2) | DECIMAL(10,2) |
날짜/시간 | DATE, TIMESTAMP | DATETIME, DATE | DATETIME, DATE |
🔹 날짜 조회 예시 (오라클)
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
🔹 MySQL/MSSQL
SELECT NOW(); -- MySQL
SELECT GETDATE(); -- MSSQL
👉 주의할 점: 오라클의 DATE 타입은 시간까지 포함하므로, DATETIME과 같은 개념이라고 보면 됨.
4️⃣ LIMIT 대신 ROWNUM / FETCH 사용
MySQL이나 MSSQL에서는 LIMIT을 사용하지만, 오라클에서는 ROWNUM 또는 FETCH FIRST를 사용해야 함.
🔹 MySQL / MSSQL
SELECT * FROM employees ORDER BY salary DESC LIMIT 5;
🔹 오라클 (ROWNUM 사용)
SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) WHERE ROWNUM <= 5;
🔹 오라클 (FETCH FIRST - 최신 방식)
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 5 ROWS ONLY;
👉 권장사항: 오라클 12c 이상에서는 FETCH FIRST를 사용하는 것이 더 직관적임.
5️⃣ 문자열 연결 연산자 차이
- 오라클: || (더블 파이프) 사용
- MSSQL / MySQL: + 또는 CONCAT() 사용
🔹 오라클 (|| 연산자)
SELECT 'Hello ' || 'World' FROM DUAL; -- 결과: Hello World
🔹 MySQL, MSSQL (CONCAT 함수)
SELECT CONCAT('Hello ', 'World'); -- 결과: Hello World
👉 주의할 점: 오라클에서는 + 연산자로 문자열을 연결할 수 없으며, 반드시 ||을 사용해야 함.
6️⃣ 자동 증가 값 설정 (SEQUENCE 사용)
MySQL과 MSSQL에서는 AUTO_INCREMENT나 IDENTITY를 사용하지만, 오라클에서는 SEQUENCE를 사용해야 함.
🔹 오라클 (SEQUENCE 활용)
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;
INSERT INTO employees (id, name) VALUES (emp_seq.NEXTVAL, 'Alice');
🔹 MySQL / MSSQL
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
👉 주의할 점: 오라클에서는 AUTO_INCREMENT가 없기 때문에, SEQUENCE를 만들어서 사용해야 함.
7️⃣ 서브쿼리와 JOIN 방식 차이
오라클에서는 FROM 절에 서브쿼리를 사용할 때 반드시 ALIAS(별칭)를 지정해야 함.
🔹 오라클 (ALIAS 필수)
SELECT a.department_id, a.salary
FROM (SELECT department_id, AVG(salary) AS salary FROM employees GROUP BY department_id) a;
🔹 MySQL, MSSQL (ALIAS 없이 가능)
SELECT department_id, AVG(salary) AS salary
FROM (SELECT department_id, salary FROM employees) GROUP BY department_id;
👉 주의할 점: 오라클에서는 서브쿼리에 항상 별칭을 붙여야 실행됨.
'SQL' 카테고리의 다른 글
오라클 쿼리 부하 테스트 (0) | 2025.03.06 |
---|---|
오라클 DUAL 테이블로 원하는 개수만큼 행 생성하기 (0) | 2025.03.06 |
[PostgreSQL] current transaction is aborted, commands ignored until end of transaction block (0) | 2023.11.01 |
[POSTGRESQL] null to 0 으로 치환하기 (0) | 2023.02.16 |
[SQL] POSTGRES SQL ->>, ->가 뭔가요? (0) | 2022.12.21 |
댓글