Oracle 기반 시스템을 MSSQL로 마이그레이션할 때 가장 많은 작업이 발생하는 영역 중 하나가 프로시저(Procedure) 변환입니다. 두 DBMS는 SQL 문법과 내장 함수, 예외 처리 방식에 차이가 있기 때문에 주요 변경 사항을 이해하고 작업하는 것이 중요합니다.
이번 포스팅에서는 Oracle 프로시저를 MSSQL 프로시저로 변환할 때 자주 사용되는 대표적인 변환 예제를 정리해보겠습니다.니다.
1. DECODE → CASE 문으로 변경
Oracle의 DECODE 함수는 MSSQL에서 지원하지 않으므로 CASE 문으로 변경해야 합니다.
Oracle
DECODE(STATUS,
'A', '승인',
'R', '반려',
'기타')
MSSQL
CASE STATUS
WHEN 'A' THEN '승인'
WHEN 'R' THEN '반려'
ELSE '기타'
END
2. SELECT INTO (DUAL) → 변수 SET 문으로 변경
Oracle에서는 변수에 값을 할당하기 위해 SELECT ... INTO ... FROM DUAL 구문을 자주 사용합니다.
Oracle
SELECT A, B
INTO V_A, V_B
FROM DUAL;
MSSQL
SELECT
@V_A = A,
@V_B = B;
3. NUMBER 타입 변경
Oracle의 NUMBER 타입은 MSSQL에서 목적에 따라 적절한 숫자형 타입으로 변경해야 합니다.
| Oracle | MSSQL |
| NUMBER | INT |
| NUMBER(10) | INT |
| NUMBER(18) | BIGINT |
| NUMBER(10,2) | DECIMAL(10,2) |
| NUMBER(18,4) | NUMERIC(18,4) |
4. ADD_MONTHS → DATEADD
Oracle의 날짜 계산 함수인 ADD_MONTHS는 MSSQL의 DATEADD 함수로 변경할 수 있습니다.
Oracle
ADD_MONTHS(ORDER_DATE, -1)
MSSQL
DATEADD(MONTH, -1, ORDER_DATE)
5. 예외 처리(Exception) 방식 변경
Oracle은 EXCEPTION 구문을 통해 예외를 처리하지만, MSSQL은 @@ERROR, @@ROWCOUNT, 또는 TRY...CATCH 구문을 사용합니다.
Oracle
EXCEPTION WHEN NO_DATA_FOUND THEN
rollback;
END;
MSSQL
IF @@ERROR <> 0 BEGIN
IF @@ROWCOUNT = 0 BEGIN
ROLLBACK
END
END
'Programming > Database' 카테고리의 다른 글
| MSSQL DB가 주의대상이 되었을때 (0) | 2026.07.27 |
|---|---|
| MSSQL 자동백업방법 (0) | 2026.06.24 |
| MSSQL 서버 테이블 수정하기/자동증가값 초기화/패스워드 암호화 하기 (0) | 2025.12.20 |
| MSSQL 함수 구현 #1 (문자 앞에 0을 붙이는 함수) (0) | 2025.12.19 |
| [MySQL] SQL 배치 작업 하기 (0) | 2025.12.19 |