캐릭터셋이 다른 DB의 한글 깨짐 현상 해결 방법

SAP 의 경우 고정적으로 WE8DEC 유럽형 언어를 쓰게 되므로 데이터를 DB Layer에서 꺼낼 경우

깨짐 현상이 있습니다.

이를 해결 하는 방법 입니다.

논리적 그림 입니다.


작업 대상 테이블

대상 테이블

ZSMS03 구조

CMP_MSG_ID NOT NULL VARCHAR2(20)

ZMDID NOT NULL VARCHAR2(10)

CMP_USR_ID NOT NULL VARCHAR2(5)

ODR_FG NOT NULL VARCHAR2(1)

MSG_GB NOT NULL VARCHAR2(1)

WRT_DTTM NOT NULL VARCHAR2(14)

SND_DTTM NOT NULL VARCHAR2(14)

SMS_GB NOT NULL VARCHAR2(1)

USED_CD NOT NULL VARCHAR2(3)

RCV_PHN_ID NOT NULL VARCHAR2(15)

CALLBACK NOT NULL VARCHAR2(15)

SND_MSG RAW(2000) ß 한글 컬럼

REG_SND_DTTM NOT NULL VARCHAR2(14)

SND_PHN_ID NOT NULL VARCHAR2(15)

REG_RCV_DTTM NOT NULL VARCHAR2(14)

EXPIRE_VAL NOT NULL VARCHAR2(7)

SMS_ST NOT NULL VARCHAR2(1)

RSLT_VAL NOT NULL VARCHAR2(4)

CMP_SND_DTTM NOT NULL VARCHAR2(14)

CMP_RCV_DTTM NOT NULL VARCHAR2(14)

RCV_MNO_CD NOT NULL VARCHAR2(5)

RSRVD_ID NOT NULL VARCHAR2(20)

RSRVD_WD NOT NULL VARCHAR2(32)

ASSIGN_CD NOT NULL VARCHAR2(1)

SND_GB NOT NULL VARCHAR2(1)

SND_SKT_FG NOT NULL VARCHAR2(1)

SND_KTF_FG NOT NULL VARCHAR2(1)

SND_LGT_FG NOT NULL VARCHAR2(1)

NAT_CD NOT NULL VARCHAR2(3)

MSG_ID NOT NULL VARCHAR2(20)

ZRDATE NOT NULL VARCHAR2(8)

ZRTIME NOT NULL VARCHAR2(6)

ZFLAG NOT NULL VARCHAR2(1)

작업 절차

1. 뷰 생성

< SAP R/3 DB : 캐릭터셋 WE8DEC >

CREATE VIEW forsms.ZSMS03 AS

SELECT CMP_MSG_ID,

ZMDID,

CMP_USR_ID,

ODR_FG,

MSG_GB,

WRT_DTTM,

SND_DTTM,

SMS_GB,

USED_CD,

RCV_PHN_ID,

CALLBACK,

UTL_RAW.CAST_TO_RAW(SND_MSG) SND_MSG,   ß 뷰를 생성 하면서 RAW 값을 BYTE 값으로 변환

REG_SND_DTTM,

SND_PHN_ID,

REG_RCV_DTTM,

EXPIRE_VAL,

SMS_ST,

RSLT_VAL,

CMP_SND_DTTM,

CMP_RCV_DTTM,

RCV_MNO_CD,

RSRVD_ID,

RSRVD_WD,

ASSIGN_CD,

SND_GB,

SND_SKT_FG,

SND_KTF_FG,

SND_LGT_FG,

NAT_CD,

MSG_ID,

ZRDATE,

ZRTIME,

ZFLAG

FROM SAPR3.ZSMS03;

< 수신 DB I-service DB : KC15KSO5601 >

1. DB 링크를 이용한 원격지에서 데이터 베이스 링크 생성

> create public database link ads_sms_link connect to forsms identified by forsms1234 using ‘ADS’ ;

2. BYTE를 varchar2 값으로 변환 함수를 이용하여 뷰 생성

CREATE VIEW arreo_sms.ZSMS03 AS

SELECT CMP_MSG_ID,

ZMDID,

CMP_USR_ID,

ODR_FG,

MSG_GB,

WRT_DTTM,

SND_DTTM,

SMS_GB,

USED_CD,

RCV_PHN_ID,

CALLBACK,

UTL_RAW.CAST_TO_VARCHAR2(SND_MSG) SND_MSG,    ß 다시 VARCHAR2 값으로 변경

REG_SND_DTTM,

SND_PHN_ID,

REG_RCV_DTTM,

EXPIRE_VAL,

SMS_ST,

RSLT_VAL,

CMP_SND_DTTM,

CMP_RCV_DTTM,

RCV_MNO_CD,

RSRVD_ID,

RSRVD_WD,

ASSIGN_CD,

SND_GB,

SND_SKT_FG,

SND_KTF_FG,

SND_LGT_FG,

NAT_CD,

MSG_ID,

ZRDATE,

ZRTIME,

ZFLAG

FROM ZSMS03@ads_sms_link;

작업 결과

< 뷰 를 이용한 조회 결과 >

select * from arreo_sms.ZSMS03 ;

00000000000000000001                                 LOGIC                     VKIS1                                          01000005846

SMS 문자 전송 테스트 입니다. ß 한글을 바로 보여짐

01000005846                                                     0000000             0000

20100906             140000

< 기존 테이블을 바로 조회한 결과 >

select * from sapr3.ZSMS03@ads_sms_link;

700 00000000000000000001            LOGIC         VKIS1                                         01000005846

SMS ¹?AU Au¼U AŒ½ºÆ? AO?I?U. ß 한글 깨짐                                                                                         01000005846

0000000      0000                                                                                                 20100906     140000

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.