오라클 에서 MSsql로 컨버젼 작업을 진행 혹은 반대로 진행 하는 경우가 많다.
또한 오라클에서는 이렇게 썼는데 MSsql에서는 어떻게 쓰지? 이렇게 가끔 생각하는 경우가 있다.
몇가지 기억나는 순서대로 정리 해 보았다.
아래의 정리내역은 순수하게 기억나는 대로 정리하였기 때문에 실수도 있음을 인정해 달라..ㅋ
그래도 나도 가끔 이 정리한 내역을 보면서 유용하게 사용 하곤 한다.
항목 |
처리방식 |
Outer Join 수정 |
- 표준 outer join을 사용할 것. 주의) 표준 outer joun 사용 시 상수의 outer join 주의 예) FROM v_acl_user acluser, v_acl_dept acldept WHERE acluser.deptid=acldept.deptid(+) AND acldept.useyn ='Y'(+) FROM v_acl_user acluser LEFT OUTER JOIN WHERE acldept.useyn ='Y' 가 절대 아님 |
NVL 수정 |
- NVL => ISNULL 주의) NVL( 변수, '') 인 경우는 ISNULL 에서 NULL 과 동일하게 인식하므로 예) NVL(a.amount,0) |
Convert 함수 |
- TO_NUMBER, TO_DATE,TO_CHAR 등의 함수 예) 1) TO_NUMBER(x0.eval_totpoint) 2) to_char(sysdate,'YYYYMMDD') |
String 연결 함수 |
- || => + 예) B.id LIKE (A.id || '%') |
SUBSTRING 함수 |
- SUBSTR => SUBSTRING 예) SUBSTR(up_deptid ,1 ,4) SUBSTR(a.nm,4) |
상위 1 개 Select |
- /*+ first_rows */ => TOP 문 으로 치환 |
rownum 수정 |
- TOP 으로 수정 예) WHERE rownum = 1 - Select 바로 옆의 rownum 은 Cursor 이용함 |
LENGTH/LENGTHB |
- LENGTH => LEN 예) LENGTH(up_deptid) - LENGTHB => DATALENGTH |
DECODE/Greatest/Least |
- CASE .. WHEN .. ELSE.. END 로 수정 오라클은 8i(?) 부터 위의 문장이 되므로 오라클도 case사용 |
LPAD / RPAD |
-REPLICATE 및 DATALENGTHB 이용하여 변경 예) LPAD(to_char(w_seq_no), 4, '0') RPAD(' ',depth*3) |
TRIM 함수 |
예) TRIM(@v_apprepuserid) |
DATE 연산 함수 |
- ADDDATE 함수 사용 예) sysdate + 1 |
INSTR 함수 |
- CHARINDEX 함수 사용 예) INSTR(문자열a,문자열b) |
CHR(10) |
CHR(10) => CHAR(10), CHR => CHAR 로 변경 |
SF 수정 절차 |
1) varchar2 => varchar로 2) number => numeric 3) 변수 앞에 @ 붙이기 및 Declare 추가 예제) aaa => @aaa 4) 변수 선언 시 Declare 추가 5) ";" 제외 6) Exception 부분의 no data found 부분 처리 7) IF 문 수정 8) 선언문 수정( := => SET 또는 SELECT) 9) INTO 문 없애기 **기타) Query 문 수정 주의) 함수에서 GETDATE() 함수는 사용 불가 #Temp table 사용 불가 함수를 select 문에서 call 할 경우 반드시 owner 이름을 붙인다 => select dbo.sf_get('a')) |
SP 수정 절차 |
* SF 와 거의 유사 |
Trigger 수정 절차 |
1) :old, :new 대신 select id from deleted OR select id from inserted 사용 2) SP Call 할 경우 sp_('a','a')=>exec sp_ 'a','a' 3) ON Table 명을 Trigger 명 바로 뒤에 예제) CREATE TRIGGER tr_t_appline_insert ON t_appline 4) Before Trigger 가 안됨 => FOR 로 대치함 5) FOR EACH 인 경우 Cursor 를 이용하여 Loop 처리 6) old 와 new 를 같이 사용하는 UPDATE의 경우 PK 에 대한 수정은 없다고 가정 * 나머지 문법적인 요소는 SP/SF 참조 |
SF 호출 |
- Store Function 호출 시 반드시 dbower.function 명으로 호출 예) SELECT sf_appcontent_columnval('a','a') |
다소 지저분하게 정리가 되었다. 위의 테이블은 ORACLE에서 MSSQL로의 CONVERSION 기준으로 정리 하였다.
'IT reference > OS,DB' 카테고리의 다른 글
오라클 데이터베이스이 테이블 스페이스별 사용량을 알아보자. (4) | 2008.12.09 |
---|---|
자바 프로그램은 역으로 컴파일 해보자. (0) | 2008.12.04 |
배드섹터 검사 및 치료 (2) | 2008.11.25 |
리눅스 네트워크 연결 NFS (0) | 2008.11.19 |
오라클 start with connect by prior (0) | 2008.11.12 |
WRITTEN BY