728x90

1. RAWTOHEX() 함수란?
RAWTOHEX() 함수는 Oracle에서 RAW 데이터를 16진수 문자열(HEX)로 변환하는 데 사용됩니다. 이 함수는 BLOB, 암호화된 데이터, 해시값 등 사람이 읽을 수 없는 RAW 데이터를 시각화하거나 디버깅할 때 매우 유용합니다.
2. 문법
RAWTOHEX(raw_input)
- raw_input: RAW 타입의 입력 값
- 반환값: VARCHAR2 타입의 16진수 문자열
3. 기본 사용 예제
예제 1: RAW 값 변환
SELECT RAWTOHEX(UTL_RAW.CAST_TO_RAW('Hello')) AS hex_output FROM dual;
결과: 48656 C6 C6 F
예제 2: 테이블 칼럼의 RAW 데이터 출력
SELECT id, RAWTOHEX(binary_col) AS hex_data
FROM secure_data;
바이너리 데이터를 사람이 읽을 수 있는 HEX 문자열로 변환하여 조회
4. 실무 활용 사례
- 암호화된 토큰이나 인증 키를 HEX 문자열로 로깅할 때
- 데이터 검증 시 BLOB/RAW 데이터 비교 용도
- 네트워크 패킷이나 해시값을 디버깅할 때
- 시스템 간 데이터 변환을 위한 중간 포맷 제공
5. RAWTOHEX vs HEXTORAW 함수 비교
| 함수 | 입력 | 출력 | 용도 |
|---|---|---|---|
| RAWTOHEX() | RAW | 16진수 문자열 | RAW → 사람이 읽을 수 있는 HEX 문자열 |
| HEXTORAW() | 16진수 문자열 | RAW | HEX 문자열을 RAW 데이터로 복원 |
6. PL/SQL에서의 활용 예
DECLARE
v_raw RAW(50) := UTL_RAW.CAST_TO_RAW('Oracle');
v_hex VARCHAR2(100);
BEGIN
v_hex := RAWTOHEX(v_raw);
DBMS_OUTPUT.PUT_LINE('HEX 변환 결과: ' || v_hex);
END;
7. RAWTOHEX 결과 포맷 이해
문자열 'ABC'를 RAW로 변환하면 414243 (A:41, B:42, C:43)으로 출력됩니다. 각 문자의 ASCII 코드 값이 2자리 16진수로 표시되는 구조입니다.
8. 보안 및 해시값 시나리오 예제
SELECT file_id,
RAWTOHEX(sha256_hash) AS hash_hex
FROM file_hashes
WHERE file_type = 'PDF';
해시값을 텍스트로 출력하거나 로그에 남길 때 사용
9. 디버깅 및 로그 용도로의 응용
- 암호화된 데이터가 올바르게 저장되었는지 확인
- 중간 값의 HEX 표현을 통해 디버깅 로직 구현
- 데이터 유효성 검증 자동화 시 로그 저장
10. 관련 함수 조합 활용 팁
- HEXTORAW(): RAWTOHEX()의 반대 함수
- UTL_ENCODE.BASE64_ENCODE(): RAW → BASE64
- DBMS_CRYPTO.HASH(): RAW로 해시값 생성 → RAWTOHEX()로 가시화
11. 주의사항
- RAWTOHEX는 RAW 입력만 허용하며 VARCHAR2에는 사용 불가
- 길이가 긴 RAW 데이터를 변환할 경우 출력 문자열이 매우 길어질 수 있음
- 디버깅 로그 출력 시 보안성 고려 필요 (암호화 키 노출 방지)
12. 마무리
RAWTOHEX() 함수는 Oracle에서 RAW 데이터를 시각화하거나 검증, 디버깅하는 데 매우 유용한 도구입니다. 특히 보안 관련 시스템, 파일 해시값 저장, 인증 토큰 처리 등에서 HEX 문자열로의 변환이 필요한 경우 활용도가 높습니다. HEXTORAW(), DBMS_CRYPTO, UTL_ENCODE 등과 함께 사용하면 더욱 강력한 데이터 처리 로직을 구성할 수 있습니다.
출처 및 참고 자료
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- Oracle DBMS_CRYPTO 패키지 문서
- 실무 데이터 처리 및 PL/SQL 프로젝트 경험 기반
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ROWIDTOCHAR()로 ROWID를 문자형으로 변환하는 방법 (0) | 2025.06.07 |
|---|---|
| [ORACLE] CHARTOROWID() 함수 완벽 가이드 : 문자형 ROWID를 ROWID로 변환 (0) | 2025.06.06 |
| [ORACLE] HEXTORAW() 함수 완전 정복 : 16진수 → RAW 변환 실무 가이드 (0) | 2025.06.06 |
| [ORACLE] NUMTOYMINTERVAL() 사용법과 실전 예제로 배우는 기간 연산 처리 (0) | 2025.06.06 |
| [ORACLE] NUMTODSINTERVAL() 함수로 초/분/시간/일 간격 간편 계산하기 (0) | 2025.06.06 |