가끔 SQL 문에서 진수 변환을 하고 싶은 경우가 있어 만들어 놓은 함수입니다..
CREATE OR REPLACE FUNCTION SF_CVT_DEC2HEXA
(
I_N_DEC IN NUMBER, // 입력값
I_N_MODE IN NUMBER, // 변환할 진수
I_N_LEN IN NUMBER // 리턴될 자릿수
) RETURN VARCHAR2 IS
S_TRANS VARCHAR2(32) := '0123456789ABCDEFGHIJKLMNOPQRSTUV';
S_HEXACHAR VARCHAR2(32) := '';
N_MODE NUMBER(2) := 2;
N_MOK NUMBER(10) := 0;
N_REM NUMBER(10) := 0;
BEGIN
N_MOK := I_N_DEC;
N_MODE := I_N_MODE;
CASE N_MODE
WHEN 2 THEN
N_MODE := I_N_MODE;
WHEN 8 THEN
N_MODE := I_N_MODE;
WHEN 16 THEN
N_MODE := I_N_MODE;
WHEN 32 THEN
N_MODE := I_N_MODE;
ELSE
N_MODE := 2;
END CASE;
LOOP
N_REM := MOD(N_MOK, N_MODE);
S_HEXACHAR := SUBSTRB(S_TRANS,N_REM+1,1) || S_HEXACHAR;
N_MOK := TRUNC(N_MOK / N_MODE,0);
IF N_MOK = 0 THEN
EXIT;
END IF;
END LOOP;
IF LENGTH(S_HEXACHAR) < I_N_LEN THEN
S_HEXACHAR := LPAD(S_HEXACHAR, I_N_LEN,'0');
ELSE
S_HEXACHAR := SUBSTRB(S_HEXACHAR , -1 * I_N_LEN, I_N_LEN );
END IF;
RETURN S_HEXACHAR;
EXCEPTION
WHEN OTHERS THEN
RETURN SQLERRM;
END SF_CVT_DEC2HEXA;
32진수 까지 됩니다..
[출처] 진수변환 ORACLE FUNCTION (파워빌더 모임) |작성자 bitbob
'Carpe Programming > oracle' 카테고리의 다른 글
[oracle] 데이터 좌/우 reverse 시키키 (0) | 2012.02.17 |
---|---|
[orcale] 문자열 패턴 개수 추출 (0) | 2012.02.16 |
[oracle] 16진수 -> 2진수 (0) | 2012.02.16 |
[oracle] Hash Join 테이블 조인순서 바꾸기 (0) | 2012.02.13 |
[oracle] JDBC driver 종류 (0) | 2012.02.10 |