Oracle-MSSQL 변환가이드 2017.06.09 이씨스 기술연구소 선임 김태용.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
UNCLASSIFIED 411 th Contracting Support Brigade U.S. Army Expeditionary Contracting CommandU.S. Army Contracting Command UNCLASSIFIED 1 Click 하여 정보 입력을.
Chapter 04 SQL 고급.
재료수치해석 HW # 박재혁.
19.(코드+년도+월)별,(코드)별,전체총액을 한번에
SQL 0613.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
Perfect! 대용량 데이터베이스 튜닝Ⅱ.
Consumer PC & AIO PC DMI Refresh 방법 설명 (UEFI DMI Ver)
5장 SQL 주요 함수.
06 SQL 함수 SQL 함수의 개념 문자 함수 숫자 함수 날짜 함수 데이터 타입의 변환 일반 함수.
데이터 베이스 설계 및 실습 #1 - 오라클 설치 및 SQL 기본.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
14장 질의응답 한빛미디어(주).
ANSYS17.2 Student 제품 무료 다운로드
데이터 베이스 설계 및 실습 #3 - SQL 함수.
Lesson 5. 레퍼런스 데이터형.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
Windows 8 Ksystem G&I 설치.
SQL 함수 SQL 함수.
Lesson 6. 형변환.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
제3장 스택과 큐.
Heesang kim PL/SQL 3 Heesang kim.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               SQL (2) - 함수, 뷰.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
Tail-recursive Function, High-order Function
프로그래밍 랩 – 7주 리스트.
KIM HEESANG PL/SQL 2 KIM HEESANG
11장. 1차원 배열.
You YoungSEok Oracle 설치 You YoungSEok
C#.
ㅇ 스프링 설정파일 (dispatcher-servlet.xml)
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
TSRM 사용시 PC 기본환경설정 1. 로그인이 안되는 문제해결 1) Windows8 이상일때
JDBC Lecture 004 By MINIO.
1장. SELECT 문장을 이용하여 원하는 데이터 가져오기
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
JSP 게시판 구현.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
강릉원주대학교 전임교원대상 온라인 교수법 특강
Excel 일차 강사 : 박영민.
2nd day Indexing and Slicing
에어 PHP 입문.
Stored program 2 장종원
Chapter 10 데이터 검색1.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
Summary of Pointers and Arrays
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
IPC 펌웨어 업그레이드 방법 안내 ** 반드시 IPC를 NVR POE 포트 연결 전에 작업 하시기 바랍니다. IPC를 NVR POE 포트에 연결 하실 경우 IP 대역폭을 마추셔야 하는 작업이 필요합니다. **
SQL 함수.
Excel 일차 강사 : 박영민.
Microsoft Word 2002 제1장 문자열의 삽입과 변경.
 6장. SQL 쿼리.
BoardGame 보드게임 따라가기.
Presentation transcript:

Oracle-MSSQL 변환가이드 2017.06.09 이씨스 기술연구소 선임 김태용

함수 NVL -> ISNULL SUBSTR -> SUBSTRING CONCAT or || -> + 함수설명 오라클 함수명 MSSQL 함수명 Input이 NULL일 경우, 지정한 값으로 세팅한 결과를 반환 NVL ISNULL position위치에 있는 char의 문자열부터 length갯수만큼 값을 반환 SUBSTR SUBSTRING 두 문자열을 연결하여 그 결과를 반환 CONCAT or || + (단, SQL 2012버전부터 CONCAT사용가능) 문자열 길이가 N개가 되도록 왼쪽부터 지정한 문자로 채운 결과를 반환 LPAD REPLICATE('0',반복할사이즈 - LEN(숫자값|컬럼)) + CAST(숫자값|컬럼 AS VARCHAR) 형식으로 변경가능 dbo.LPAD( 사용자 정의 함수 생성필요 )  문자열 길이가 N개가 되도록 오른쪽부터 지정한 문자로 채운 결과를 반환 RPAD CAST(숫자값|컬럼 AS VARCHAR) +REPLICATE('0',반복할사이즈 - LEN(숫자값|컬럼)) 형식으로 변경가능 dbo.RPAD( 사용자 정의 함수 생성필요 )  해당 문자열의 문자 수를 반환 LENGTH LEN 숫자를 문자로 변환 TO_CHAR(숫자) CONVERT(VARCHAR(길이), 숫자)  NVL -> ISNULL SUBSTR -> SUBSTRING CONCAT or || -> + LPAD -> UF_LPAD( 사용자 정의 함수 생성필요 ) RPAD -> UF_RPAD( 사용자 정의 함수 생성필요 ) LENGTH -> LEN TO_CHAR(숫자) -> CONVERT(VARCHAR(길이), 숫자)  TO_NUMBER(문자열) -> CONVERT(INT,문자열) or CAST(문자열 AS INT) DECODE(컬럼명, 'A', 'B') -> CASE 컬럼명 WHEN 'A' THEN 'B' ELSE 'C' END TO_CHAR(DATE타입 컬럼, 'YYYY-MM-DD') -> CONVERT(CHAR(10), DATE타입 컬럼,126)

함수 함수설명 오라클 함수명 MSSQL 함수명 문자를 숫자로 변환 TO_NUMBER(문자열) CONVERT(INT,문자열) or CAST(문자열 AS INT) 비교연산을 통한 참,거짓항목의 값을 반환 DECODE(컬럼명, ‘A’, ‘B‘, ’C’) CASE 컬럼명 WHEN 'A' THEN 'B' ELSE 'C' END Date형을 문자열로 반환 TO_CHAR(DATE타입 컬럼, 'YYYY-MM-DD') CONVERT(CHAR(10), DATE타입 컬럼,126) DBMS시스템 현재시간 sysdate GETDATE() 입력문자열 중 가장 우선순위가 큰 문자열 찾기 GREATEST(‘A’,’B’,’C’) dbo.GREATEST(‘A’,’B’,’C’) 입력문자열 중 가장 우선순위가 낮은 문자열 찾기 LEAST(‘A’,’B’,’C’) dbo.LEAST(‘A’,’B’,’C’) 문자열을 DATETIME 타입으로 변경해주기 TO_DATE(STR, 'YYYY-MM-DD HH24:MI:SS') TO_DATE(STR, 'YYYY-MM-DD') CONVERT (DATETIME, '2014-12-16 15:10:01.000') CONVERT (DATETIME, '2014-12-16 15:10:01') CONVERT (DATETIME, '2014-12-16') 문자열을 DATE 타입으로 변경해주기 TO_DATE(STR, 'YYYYMMDD') CONVERT (DATETIME, '2014/12/16') CONVERT (DATETIME, '20141216') TO_DATE(STR, 'YYYYMMDDHH24MISS') CONVERT(DATETIME, STUFF(STUFF(STUFF('20141216 151001',13,0,':'),11,0,':'),9,0,' ')) TO_CHAR(TO_DATE(EVENT_SVC_BGNDE, 'YYYYMMDD'),'YYYY-MM-DD') STUFF(STUFF(EVENT_SVC_BGNDE,5,0,':'),8,0,':') http://www.sqlines.com/oracle-to-sql-server/add_months ADD_MONTHS(SYSDATE, 3) DATEADD(month, 3, GETDATE())

Oracle MSSQL TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYMMDDHH24MI') REPLACE(CONVERT(VARCHAR(8), GETDATE(), 112)+CONVERT(VARCHAR(6), GETDATE(), 114), ':','') TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYMMDDHH24MISS') REPLACE(CONVERT(VARCHAR(8), a.FRST_REGIST_PNTTM, 112)+CONVERT(VARCHAR(8), a.FRST_REGIST_PNTTM, 114), ':','') TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS') CONVERT(VARCHAR, a.FRST_REGIST_PNTTM,120) TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') CONVERT(VARCHAR(10), A.FRST_REGIST_PNTTM,120) TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYMMDD') CONVERT(VARCHAR, a.FRST_REGIST_PNTTM,112) TO_CHAR(c.FRST_REGIST_PNTTM, 'YYYYMMDD') CONVERT(VARCHAR, c.FRST_REGIST_PNTTM,112) TO_CHAR(d.FRST_REGIST_PNTTM, 'YYYYMMDD') CONVERT(VARCHAR, d.FRST_REGIST_PNTTM,112) TO_CHAR(SYSDATE - 1, 'YYYYMMDD') CONVERT(VARCHAR, GETDATE()-1,112) TO_CHAR(sysdate, 'YYYYMMDD') CONVERT(VARCHAR, GETDATE(),112) TO_CHAR(sysdate, 'YYYY-MM-DD') CONVERT(VARCHAR(10), GETDATE(),120) TO_CHAR(A.FRST_REGIST_PNTTM,'YYYYMMDD') CONVERT(VARCHAR, A.FRST_REGIST_PNTTM,112) TO_CHAR(CREAT_DT, 'YYYYMMDD') CONVERT(VARCHAR, CREAT_DT,112) TO_CHAR(FRST_REGIST_PNTTM,'YYYYMMDD') CONVERT(VARCHAR, FRST_REGIST_PNTTM,112) TO_CHAR(A.FRST_REGIST_PNTTM, 'YYYY') CONVERT(VARCHAR(4), A.FRST_REGIST_PNTTM,112) --CONVERT(VARCHAR(4), A.FRST_REGIST_PNTTM,120) TO_CHAR(A.FRST_REGIST_PNTTM, 'YYYY‘MM) CONVERT(VARCHAR(6), A.FRST_REGIST_PNTTM,112) --CONVERT(VARCHAR(6), A.FRST_REGIST_PNTTM,120) TO_CHAR(A.LAST_UPDT_PNTTM, 'YYYY-MM-DD HH24:MI:SS') CONVERT(VARCHAR, A.LAST_UPDT_PNTTM,120) TO_CHAR(GETDATE(), 'YYYYMMDD')) TO_CHAR((SYSDATE - 210), 'YYYYMMDD') CONVERT(VARCHAR, GETDATE()-210, 112)

Oracle MSSQL rownum rn ROW_NUMBER() OVER(ORDER BY BATCH_SCHDUL_ID ASC) rn ROW_NUMBER() OVER(ORDER BY XXXXSORTXXXXXXXX ) RNUM ORDER BY A.BATCH_SCHDUL_ID ASC 삭제하고, 위와 같이 OVER의 인자로 넣어줌 (단, 이때A. 과 같은 alias참조를 제거하고 넣어줌.) ) TB ) WHERE rn BETWEEN #firstIndex# + 1 AND #firstIndex# + #recordCountPerPage# ) TB ) _TMP /* 위와 같이 _TMP란 alias를 줘야함. */ WHERE ROWNUM < 5 TOP 5 NVL( 로 검색한다. ISNULL( 로 변환한다. 끝 DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN CASE B.EMPLYR_ID WHEN NULL THEN 'N' ELSE 'Y' END AS REG_YN CASE WHEN B.EMPLYR_ID IS NULL THEN 'N' ELSE 'Y' END AS REG_YN dbms_lob.SUBSTRING( 로 검색한다. SUBSTRING( 로 변환한다. 끝 TRIM(문자열) RTRIM(LTRIM( 문자열 ) )

TO_CHAR(DATE타입 컬럼, 'YYYY-MM-DD') -> CONVERT(CHAR(10), DATE타입 컬럼,126) SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008 SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02 SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy SELECT convert(varchar, getdate(), 106) -- dd mon yyyy SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

TO_CHAR(DATE타입 컬럼, 'YYYY-MM-DD') -> CONVERT(CHAR(10), DATE타입 컬럼,126) SELECT convert(varchar, getdate(), 108) -- hh:mm:ss SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd SELECT convert(varchar, getdate(), 112) -- yyyymmdd SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm

1 2 3 4 5 6 7 8 9 10 11 12 13 14 Description 1 접속정보 입력 2 연결진행중 로그 3 마이그레이션 할 대상 DB 4 접속시도중 로그 5 진행률(더디게 보여도 동작하니 기다려야함) 실제 예시 TO_CHAR(A.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS FRST_REGIST_PNTTM  CONVERT(VARCHAR, A.FRST_REGIST_PNTTM,120) == CONVERT(VARCHAR(19), A.FRST_REGIST_PNTTM,120) 주로 아래의 쿼리변경이 많음, 그래서 이럴땐 그냥 통짜로 바꿀수 있는데까지 바꿔버림. 다음 페이지 참고 CONVERT(VARCHAR, A.LAST_UPDT_PNTTM,120) CONVERT(VARCHAR, A.FRST_REGIST_PNTTM,120) CONVERT(VARCHAR, A.CREAT_DT,120)

쿼리문 일괄 변경하기 변경 대상검색하기

쿼리문 일괄 변경하기 똑같은 대상 확인하면 해당 키워드(아래와 같이)라인 통째로 복사한다. 똑같은 대상 확인하면 해당 키워드(아래와 같이)라인 통째로 복사한다. TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM 위의 키워드로 다시 검색한다.

쿼리문 일괄 변경하기 검색된 결과를 아래의 키워드로 모두 일결변경하기 CONVERT(VARCHAR(10), a.FRST_REGIST_PNTTM,120) as FRST_REGIST_PNTTM

쿼리문 일괄 변경하기 마찬가지로 TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS')  CONVERT(VARCHAR, a.FRST_REGIST_PNTTM,120) 로 변경함. 그담에 또 덜변경된 걸 찾아야하니 TO_CHAR로 검색하고, 위 과정을 반복함.

Mybatis 변경하기 ibatis Mybatis <isEqual prepend="AND" property="searchCondition" compareValue="1"> TEST = #searchCondition# </isEqual> <if test="searchCondition== 1"> AND TEST = #{searchCondition} </if> <typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap" /> Mybatis-config.xml 파일내에 이동하여 반드시 정의 <configuration> <typeAliases> </typeAliases> </configuration> <sqlMap namespace="SysLogDAO"> </sqlMap> <mapper namespace="SysLogDAO"> </mapper> <resultMap id="SysLogVO" class="egovframework.com.sym.log.lgm.service.SysLog"> <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog"> parameterClass , resultClass parameterType , resultMap #something# , $something$ #{something} , ${something} <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

Mybatis 변경하기 ibatis Mybatis columnIndex="8“ …. 등으로 검색하여 일괄 삭제하는게 빠름(폴더 범위 지정하여 ex) selected resources) 삭제해야함. 더 이상 안씀 , 아래와 같이 맵핑을 하삼. <result property="userSe" column="userSe"/>

이외에도 차이점이 있을 것이나, 제가 변환하면서 필요한 내용을 정리한 것입니다. 도움이 되었으면 좋겠습니다.  Oracle to MSSQL 쿼리 변환 시 검토할 점 : 참고 사이트 : 15. TRUNC(Number) 함수는 ROUND(Number, 0, 1)로 대체 16. 숫자 연산 시 MSSQL은 기본이 Integer 형이므로 소수점 이하를 표시하기 위해서는 DECIAML로 캐스팅 해줘야 함     예) SELECT 10 / 3 => 3           SELECT 10 / CASE(3 AS DECIMAL) => 3.333333333333333 17. MSSQL에서는 'YYYYMMDDHH24MISS' 형식의 날짜 포멧이 지원되지 않음 18. (+) 형태의 구문은 OUTER JOIN 형태로 대체     예) ORACLE - SELECT * FROM Table A, Table B WHERE A.Field = B.Field(+)           MSSQL  - SELECT * FROM Table A LEFT OUTER JOIN Table B ON A.Field = B.Field 19. ORDER BY 결과에 NULL 값의 위치가 다름     예) ORACLE - ORDER BY Field 결과에 NULL 값이 가장 나중에 조회           MSSQL  - ORDER BY Field 결과에 NULL 값이 가장 빠르게 조회 20. TO_CHAR 함수는 CONVERT로 변환     예) ORACLE - TO_CHAR(Number)           MSSQL  - CONVERT(VARCHAR, Number)   이외에도 차이점이 있을 것이나, 제가 변환하면서 필요한 내용을 정리한 것입니다. 도움이 되었으면 좋겠습니다. 1. Sub Query에 Alies는 필수 2. Sub Query 내에 ORDER BY 절을 사용할 수 없음 3. NVL 함수는 ISNULL로 대체 4. SUBSTR 함수는 SUBSTRING으로 대체 5. 문자열 연결 ||는 +로 대체 6. TRIM 함수는 LTRIM(RTRIM(FieldName))으로 대체 7. STDDEV 함수는 STDEV로 대체 8. CEIL 함수는 CEILING으로 대체   9. ROWNUM     - ORDER BY 절 없이 WHERE 절에서 ROWNUM = 1 사용 시 SELECT 절에서 Top1으로 대체      - ORDER BY  절 사용 시, SELECT 절에 ROWNUMBER() OVER (ORDER BY Field1...FieldN) 으로 대체 10. MOD 함수는 %로 대체     예) ORACLE - MOD(10, 3)           MSSQL  - 10%3 11. MINUS 함수는 EXCEPT로 대체 12. DECODE 문은 CASE...WHEN...THEN 문으로 대체 13. LENGTH 함수는 LEN으로 대체 14. ROUND 함수는 두 번째 자리수까지 써줘야 됨     예) ORACLE - ROUND(Number) 가능.            MSSQL  - ROUND(Number, 0)까지 써줘야 함

끝 감사합니다.

샘플 샘플1 샘플2 샘플3 샘플4 Description 1 접속정보 입력 2 연결진행중 로그 3 마이그레이션 할 대상 DB 4 5 6 7 8 9 10 11 12 13 14 Description 1 접속정보 입력 2 연결진행중 로그 3 마이그레이션 할 대상 DB 4 접속시도중 로그 5 진행률(더디게 보여도 동작하니 기다려야함) 샘플 샘플1 샘플2 샘플3 샘플4