ORACLE을 MSSQL(2005)로 마이그레이션 시 가장 많이 변경 한 함수 모음
1. DECODE
: 성가신 부분으로 왠만하면 애초에 ANSI 표준인 CASE문을 사용하여 개발하는게 나을 듯... 오라클, MSSQL 모두 해당...
개발 후 절대 다른 DBMS로 마이그레이션 할 필요 없다면 그냥 DECODE 써도 됨...
(오라클에서는 유용한 기능으로 많이 사용한다. 따라서 수정할 내용도 그만큼 많음...)
2. NVL, NVL2
: 간단히 변환 가능 NVL(ORACLE) > ISNULL(MSSQL)
NVL2는 컬럼 값이 NULL이 아닌 경우 첫번째 인자 값으로 대체하고 NULL인경우 두번째 인자 값으로 대체하는 기능.
MSSQL에서는 NVL2 기능을 대체할 수 있는 함수가 없으므로 직접 함수를 만들어야 함...
함수 만들기 귀찮으면 CASE문을 사용해야 함..
3. TO_CHAR, TO_DATE, TO_NUMBER
: ANSI 표준인 CAST를 이용하여 변환(MSSQL에서는 CONVERT라는 함수를 지원한다)
다만 TO_DATE는 사용자 정의 함수(UDF)를 만들어 이용 함.. MSSQL에서 DATE타입은 제약사항이 많음..
4. ROWNUM
: MSSQL에는 ROWNUM이 없다.. 대신 ROW_NUMBER() OVER(...)가 있음.
차이점은 OVER() 안에 반드시 정렬 기준이 들어가야 한다는점.. ROW_NUMBER()는 오라클에서도 지원함.
5. LPAD, RPAD
: 설정한 길이에 맞춰 값의 왼쪽 혹은 오른쪽에 특정 문자로 채워 넣는 기능.
MSSQL에서는 이 기능을 지원하는 함수가 없으므로 REPLIDATE함수를 이용하여 그 기능을 대체한다.
REPLICATE('0'/*대체 할 값*/, 10/*대체 할 값의 길이*/ - LEN(컬럼)/*컬럼길이*/) + 컬럼
결과는 '00000000AA'/*컬럼값 AA 왼쪽에 10자리수에 맞춰 0의 값을 넣는다.*/
6. SEQUENCE
: 오라클은 SEQUENCE를 이용하여 각 테이블 별 일련번호로 사용하는 경우가 있다.
현재 개발 한 시스템도 오라클 시퀀스를 사용 함...
이를 MSSQL에서는 IDENTITY라는 기능을 사용하여 대체 할 수 있다.
필요한 것은 시퀀스 정보를 담을 시퀀스 테이블, 시퀀스를 관리 할 프로시져..
7. INLINE VIEW를 사용 할 경우
: 오라클은 인라인 뷰를 사용할 경우 테이블 별칭을 사용하지 않아도 오류가 발생하지 않지만
MSSQL에서는 인라인 뷰에 별칭이 없는 경우 오류가 발생한다. 별칭이 없을 경우 꼭 달아 주길..
인라인 뷰?
인라인 뷰는 SELECT 쿼리를 가공하여 ()로 감싸 마치 가상 테이블처럼 사용하는 방법이다.
DRIVING TABLE 외에 따로 여러 테이블을 조인하여 가공한 데이터를 DRIVING TABLE에 조인 할 때 사용하는 방법.
8. SUBSTR
: MSSQL은 SUBSTRING으로 사용한다.