캐릭터셋이 다른 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