728x90

1. HEXTORAW() 함수란?
Oracle의 HEXTORAW() 함수는 16진수 문자열(Hexadecimal string)을 RAW 데이터 타입으로 변환하는 함수입니다. 이 함수는 바이너리 데이터를 다룰 때 주로 사용되며, 암호화 키 처리, 바이너리 비교, BLOB 저장 등에서 활용됩니다.
2. 함수 문법
HEXTORAW(hex_string)
- hex_string: 짝수 길이의 16진수 문자열 (예: '4 F2 A')
- 반환값: RAW 데이터
3. 기본 사용 예제
예제 1: 16진수를 RAW로 변환
SELECT HEXTORAW('48656C6C6F') AS raw_value FROM dual;
결과: 'Hello'에 해당하는 ASCII 코드 16진 값을 RAW 타입으로 반환
예제 2: BLOB 저장을 위한 RAW 변환
INSERT INTO secure_data (id, binary_col)
VALUES (1, HEXTORAW('4A6F686E446F65'));
'JohnDoe'를 HEX로 인코딩하여 RAW 칼럼에 저장
4. HEXTORAW vs RAWTOHEX
| 함수 | 입력 | 출력 | 설명 |
|---|---|---|---|
| HEXTORAW() | 16진수 문자열 | RAW | HEX → RAW 변환 |
| RAWTOHEX() | RAW | 16진수 문자열 | RAW → HEX 변환 |
5. 실무 활용 사례
- 암호화 키를 RAW 형식으로 저장할 때
- API 토큰이나 인증 정보를 RAW 컬럼에 저장
- 이미지나 파일 헤더를 16진수로 추출해 비교
- 시스템 간 RAW 데이터 교환 시 중간 변환
6. 주의사항
- 입력 문자열은 반드시 짝수 자릿수여야 함 (예: '4F2A' → OK, '4F2' → 오류)
- 문자열 내에 유효하지 않은 16진수 문자가 있으면 오류 발생
- VARCHAR2 타입으로 전달된 문자열이어야 함
7. PL/SQL 예제
DECLARE
v_raw RAW(50);
BEGIN
v_raw := HEXTORAW('414243'); -- 'ABC'에 해당
DBMS_OUTPUT.PUT_LINE(RAWTOHEX(v_raw));
END;
8. 파일 해시값 저장 처리 예제
CREATE TABLE file_hashes (
file_id NUMBER,
sha256_hash RAW(32)
);
INSERT INTO file_hashes (file_id, sha256_hash)
VALUES (1001, HEXTORAW('A7D3F5B9C42F8739F89A75D6E0D8E9F0D1A2B3C4D5E6F7A8B9C0D0E0F1A2B3C4'));
9. RAW 데이터 조건절에서의 활용
SELECT *
FROM file_hashes
WHERE sha256_hash = HEXTORAW('A7D3F5B9C42F8739F89A75D6E0D8E9F0D1A2B3C4D5E6F7A8B9C0D0E0F1A2B3C4');
10. 유관 함수와 함께 쓰는 전략
- RAWTOHEX(): 변환 결과를 사람이 읽을 수 있는 HEX로 출력
- UTL_ENCODE.BASE64_ENCODE: RAW → BASE64로 인코딩
- TO_LOB(): RAW 데이터를 BLOB으로 변환
11. 마무리
Oracle의 HEXTORAW() 함수는 보안, 파일 처리, 시스템 통합 등 다양한 분야에서 핵심적인 역할을 합니다. 특히 HEX와 RAW 간의 변환이 필요한 경우, 이 함수를 통해 SQL 내에서 손쉽게 데이터 전환이 가능하며, 관련 함수들과 함께 사용하면 더욱 유연한 데이터 처리를 구현할 수 있습니다.
출처 및 참고 자료
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- Oracle UTL_ENCODE 및 DBMS_CRYPTO 패키지 문서
- 실제 보안 데이터 처리 프로젝트 사례
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] CHARTOROWID() 함수 완벽 가이드 : 문자형 ROWID를 ROWID로 변환 (0) | 2025.06.06 |
|---|---|
| [ORACLE] RAWTOHEX() 함수 실무 활용 법 : 해시 값, 토큰 비교에 강력한 이유 (0) | 2025.06.06 |
| [ORACLE] NUMTOYMINTERVAL() 사용법과 실전 예제로 배우는 기간 연산 처리 (0) | 2025.06.06 |
| [ORACLE] NUMTODSINTERVAL() 함수로 초/분/시간/일 간격 간편 계산하기 (0) | 2025.06.06 |
| [ORACLE] TO_YMINTERVAL()로 년월 간격 처리하기 : 실무 적용 예시 (0) | 2025.06.06 |