10進数と 16進数の基数変換

16進数、10進数変換 (HEXTODEC ファンクション)

その1 ('0000000'x 〜 '7FFFFFFF'x までが有効範囲)

CREATE OR REPLACE FUNCTION RIVUS.HEXTODEC(P_HEX IN VARCHAR2)
RETURN NATURAL
AS
BEGIN
  RETURN UTL_RAW.CAST_TO_BINARY_INTEGER(HEXTORAW(P_HEX));
END;
/

その2 ( NUMBER 型まで有効:但し、自然数のみ有効で Oracle 9i 以降 )

CREATE OR REPLACE FUNCTION RIVUS.HEXTODEC(P_HEX IN VARCHAR2)
RETURN NUMBER
AS
	vHexString  VARCHAR2(16);
	vHexChar    CHAR(1 CHAR);
	vDigit      NUMBER;
	vDecimal    NUMBER;
BEGIN
	vDecimal := 0;
	vHexString := UPPER(LTRIM(P_HEX,'0'));
	FOR i IN 1 .. LENGTH(vHexString)
	LOOP
		vHexChar := SUBSTR(vHexString, i, 1);
		CASE vHexChar
			WHEN 'A' THEN vDigit := 10;
			WHEN 'B' THEN vDigit := 11;
			WHEN 'C' THEN vDigit := 12;
			WHEN 'D' THEN vDigit := 13;
			WHEN 'E' THEN vDigit := 14;
			WHEN 'F' THEN vDigit := 15;
			ELSE          vDigit := TO_NUMBER(vHexChar);
		END CASE;
		vDecimal := 16 * vDecimal + vDigit;
	END LOOP;
	RETURN vDecimal;
EXCEPTION
	WHEN OTHERS THEN
		RETURN 0;
END;
/

CASE 文

10進数、16進数変換 (DECTOHEX ファンクション)

10進数から 16進数への変換関数は、TO_CHAR 関数 で記述できる。

CREATE OR REPLACE FUNCTION RIVUS.DECTOHEX(P_DEC IN NUMBER)
RETURN VARCHAR2
AS
BEGIN
	RETURN TO_CHAR(P_DEC,'FMXXXXXXXXXXXXXXXX');
END;
/


16進数変換 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)