SAP에서 legacy DB의 data를 dblink로 select시 한글이 깨지네요.
원인은 characterset이 서로 다르기때문일것 같은데요.
legacy쪽에서 무엇을 해주긴 힘들것 같구요.
SAP에서 select 해올때 한글이 안깨지게 해주는 방법이 있을까요?
dblink 쓰지마세요.
JAVA JCO로 처리하시면 되요.
DB 세팅 혹은 파라미터를 같게 맞추세요.
등등의 답을 원하는건 아닌거 아시죠?
ABAP단에서 처리할 수 있는 방법이 있는지 여쭤보는거니까요.
안녕하세요..
제가 가진 문제와 비슷한것 같아서... 제가 사이트에 질문한 내용에 대한 답글로 '양키'님이
주신 답글입니다...
한번활용해보심이...
2Byte 글짜깨짐 현상 아닌가 싶습니다.
글짜가 깨지는 문자에 대해서 아래 Function을 적용해보세요.
호출구문==========================================================
CALL FUNCTION 'CORRECT_2BYTES_STR'
EXPORTING
I_STR = gt_pr-txz01
IMPORTING
O_STR = gt_pr-txz01.
Function==========================================================
IMPORT L_STR TYPE C
EXPORT O_STR TYPE C
FUNCTION CORRECT_2BYTES_STR.
*-----------------------------------------------------------------------
* Data Declaration
*-----------------------------------------------------------------------
DATA: STA TYPE I, " HEXA로 읽을위치
POS TYPE I, " Space로 조정할 위치
FLG, " 현재 2Byte Pair 상태
LEN TYPE I. " Input String 길이
FIELD-SYMBOLS: <FS_I>, <FS_O> " Input String의 Hexa Value
TYPE X. " 비교할 1byte Charater의 Hexa값
DATA : HEXA TYPE X.
*-----------------------------------------------------------------------
* Main Procedure of Function
*-----------------------------------------------------------------------
O_STR = I_STR.
*--- Input String이 없으면 그냥 Return
LEN = STRLEN( I_STR ).
IF LEN = 0.
EXIT.
ENDIF.
*--- Correction 시작
ASSIGN I_STR TO <FS_I> TYPE 'X'.
CLEAR: STA, POS, FLG.
DO LEN TIMES.
STA = SY-INDEX - 1.
ASSIGN I_STR+STA(1) TO <FS_O> TYPE 'X'.
IF <FS_O> >= '80'. " 2Byte Character인지 Check: MSB가 '1'
IF FLG = SPACE.
FLG = 'X'. " 2Byte문자의 첫번째 Byte임: 시작
ELSE.
FLG = SPACE. " 2Byte문자의 두번째 Byte이고, 정상상태: 종료
ENDIF.
ELSE. " 1Byte Character임
IF FLG = 'X'. " 바로 앞의 Byte가 2Byte문자의 첫번째Byte였음.
FLG = SPACE. " 비정상으로 짤려진 2Byte문자을 Space로 변환
POS = STA - 1.
O_STR+POS(1) = SPACE. " Correction
ENDIF.
ENDIF.
ENDDO.
IF FLG = 'X'. " 마지막 문자가 짤려진 2Byte문자인지 Check
O_STR+STA(1) = SPACE. " Correct
ENDIF.
ENDFUNCTION.
==================================================================