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;
/