base64 encoding/decoding 2 7 8,796

by 궁금이 [SQL Query] [2014.08.31 21:08:31]


rowid 의 형태가 base64 encoding 기법에 의해 값이 치환되는구조로 알고있습니다.

그럼 어떤특정값을 base64 encoding 또는 decoding으로 값을 치환해주는 오라클 명령어나 함수가 있는지요?

 

by 비주류 [2014.09.01 09:10:03]

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_encode.htm#i996731

SELECT utl_encode.text_encode('구루비', 'UTF8', 1) FROM DUAL;
SELECT utl_encode.text_decode('6rWs66Oo67mE', 'UTF8', 1) FROM DUAL;

 

 


by 궁금이 [2014.09.01 12:36:24]

감사합니다. ^^


by 궁금이 [2014.09.01 13:12:33]

근데 메뉴얼에 있는 select  utl_encode.base64_encode('구루비') from dual;

는 왜 실행하면 오류가 날까요?

실행하면 16진수의 지정이 부적합하다고 나오네요..

메뉴얼말고 가이드해주신    ~~~text_encode로 실행하면 실행이 잘되는데..


by 비주류 [2014.09.01 13:43:20]

BASE64_ENCODE는 RAW 타입 파라미터를 받으므로 UTL_RAW.CAST_TO_RAW를 중간에 써야 하며, 출력 또한 RAW(HEX) 형태가 나오므로 다시 UTL_RAW.CAST_TO_VARCHAR2 로 바꿔줘야 합니다.

SELECT  utl_encode.base64_encode(utl_raw.cast_to_raw('구루비')) result_raw,
        utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('구루비'))) result_varchar2
FROM    DUAL;

==> 36 72 57 73 36 36 4F 6F 36 37 6D 45             ; 6rWs66Oo67mE

 

utl_encode.text_encode 3번째 파라미터의 경우, UTL_ENCODE.BASE64 상수값을 넣어야 하나,

PL/SQL 이 아니면 에러가 나는 문제로 실제 값인 1을 임의로 넣어준 것 입니다. 이는 가리키는 값이 나중에 바뀌는 경우 문제가 될 수 있겠네요.


by 궁금이 [2014.09.01 14:17:18]

이거 실행하면 저는 결과가 위에 꺼랑 제꺼랑 다르던데요.

영문으로 테스트한거는 잘되는거같은데, 한글로 한거는 결과가 다르게 나오는거같습니다.

7362693333~~~,      sbi357rx


by 비주류 [2014.09.02 11:53:17]

한글처리시 utl_encode.base64_decode 를 쓴다면, 현재 사용하는 인코딩 형태로 변환해줘야 합니다. (al32utf8 가정)

convert(utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('6rWs66Oo67mE'))), 'AL32UTF8')

아마도 utl_encode.text_decode 함수가 위 과정을 포함하고 있을 것 같네요.

 


by 궁금이 [2014.09.04 14:17:40]

이걸로 돌려봣는데, 결과는 똑같네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입