PostgreSQL > Oracle DB 변환

Ada·2024년 5월 2일

DB

목록 보기
1/7

1. CASE WHEN 대 DECODE

PostgreSQL에서 CASE 구문은 조건에 따라 다양한 결과를 반환하는 데 사용됩니다.
CASE 구문은 DECODE보다 더 유연하며, 더 복잡한 조건과 다중 비교를 지원합니다.

-- PostgreSQL
SELECT
  CASE
    WHEN score >= 90 THEN 'Excellent'
    WHEN score >= 80 THEN 'Good'
    WHEN score >= 70 THEN 'Average'
    ELSE 'Fail'
  END AS grade
FROM results;

Oracle에서 DECODE는 간단한 조건에 유용합니다.
비교가 많아질수록 CASE 구문을 사용하는 것이 좋습니다.

-- Oracle
SELECT
  DECODE(SIGN(score-90), 1, 'Fail', 'Pass') AS pass_fail
FROM results;

2. NOW() 대 SYSDATE

PostgreSQL의 NOW()는 현재의 날짜와 시간을 반환합니다.

-- PostgreSQL
SELECT NOW();

Oracle의 SYSDATE도 현재 날짜와 시간을 반환합니다. 두 함수는 동일한 목적을 가지고 있습니다.

-- Oracle
SELECT SYSDATE FROM dual;

3. NEXTVAL 시퀀스

시퀀스는 일련번호를 생성할 때 사용됩니다.

-- PostgreSQL
CREATE SEQUENCE user_seq;
SELECT NEXTVAL('user_seq');
-- Oracle
CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1;
SELECT user_seq.NEXTVAL FROM dual;

4. COALESCE 대 NVL

두 함수는 NULL 값을 다른 값으로 대체하는 데 사용됩니다.

-- PostgreSQL
SELECT COALESCE(username, 'Guest') FROM users;
-- Oracle
SELECT NVL(username, 'Guest') FROM users;

5. WITH RECURSIVE 대 CONNECT BY

재귀 쿼리를 사용하여 계층적 데이터를 조회합니다.

-- PostgreSQL
WITH RECURSIVE subordinates AS (
  SELECT employee_id, employee_name, manager_id
  FROM employees
  WHERE manager_id IS NULL  -- 시작 포인트
  UNION ALL
  SELECT e.employee_id, e.employee_name, e.manager_id
  FROM employees e
  JOIN subordinates s ON s.employee_id = e.manager_id
)
SELECT * FROM subordinates;
-- Oracle
SELECT employee_id, employee_name, manager_id
FROM employees
START WITH manager_id IS NULL  -- 시작 포인트
CONNECT BY PRIOR employee_id = manager_id;

6. OUTER JOIN 대 (+)

외부 조인을 사용하여 테이블 간에 일치하지 않는 행도 포함하여 결과를 반환합니다.

-- PostgreSQL
SELECT e.name, d.name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
-- Oracle
SELECT e.name, d.name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);

7. 데이터 타입 변환 (:: 대 CAST)

데이터 타입을 명시적으로 변환합니다.

-- PostgreSQL
SELECT
  column_name::INTEGER
FROM table_name;
-- Oracle
SELECT
  CAST(column_name AS INTEGER)
FROM table_name;
profile
백엔드 프로그래머

0개의 댓글