Hi,

here you go:

CREATE OR REPLACE FUNCTION HEXTONUMBER (v_HexCode IN VARCHAR2) RETURN
NUMBER IS 
v_SIG           NUMBER;
v_SIGValue      NUMBER;
v_Token         CHAR(1);
v_TokValue      NUMBER;
v_Result        NUMBER;
v_Index         NUMBER;

BEGIN
  v_Result := 0;
  v_SIG := LENGTH(v_HexCode);
  FOR v_Index IN REVERSE 0 .. (v_SIG - 1) LOOP
    -- DBMS_OUTPUT.PUT_LINE('Stelle: ' || v_Index);
    v_Token := SUBSTR(v_HexCode,(v_SIG - v_Index),1);
    -- DBMS_OUTPUT.PUT_LINE('Token: ' || v_Token);
    v_SIGValue := 1;
    IF v_Index > 0 THEN 
      FOR v_Index2 IN 1 .. v_Index LOOP
        v_SIGValue := v_SIGValue * 16;
      END LOOP;
    END IF;
    IF (v_Token BETWEEN '0' AND '9') THEN 
      v_TokValue := TO_NUMBER(v_Token);
    ELSIF (UPPER(v_Token) = 'A') THEN 
      v_TokValue := 10;
    ELSIF (UPPER(v_Token) = 'B') THEN 
      v_TokValue := 11;
    ELSIF (UPPER(v_Token) = 'C') THEN 
      v_TokValue := 12;
    ELSIF (UPPER(v_Token) = 'D') THEN 
      v_TokValue := 13;
    ELSIF (UPPER(v_Token) = 'E') THEN 
      v_TokValue := 14;
    ELSIF (UPPER(v_Token) = 'F') THEN 
      v_TokValue := 15;
    ELSE 
      RETURN -1;
    END IF;
    v_Result := v_Result + v_TokValue * v_SIGValue;
  END LOOP;
  RETURN v_Result;
END HEXTONUMBER;
/

show errors;
SELECT hextonumber('ca') FROM DUAL;

Andrey Bronfin schrieb:
> 
> Dear lists !
> Does anyone have a PL/SQL procedure converting a hexadecimal value to a
> decimal one , please ?
> Thanks a lot in advance !
> DBAndrey
> 
> * 03-9254520
> * 053-464562
> * mailto:[EMAIL PROTECTED]
> 
> --
> Please see the official ORACLE-L FAQ: http://www.orafaq.com
> --
> Author: Andrey Bronfin
>   INET: [EMAIL PROTECTED]
> 
> Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
> San Diego, California        -- Public Internet access / Mailing Lists
> --------------------------------------------------------------------
> To REMOVE yourself from this mailing list, send an E-Mail message
> to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
> the message BODY, include a line containing: UNSUB ORACLE-L
> (or the name of mailing list you want to be removed from).  You may
> also send the HELP command for other information (like subscribing).
> 
> ---------------------------------------------------------
> This Mail has been checked for Viruses
> Attention: Encrypted mails can NOT be checked!
> 
> **
> 
> Diese Mail wurde auf Viren geprueft
> Hinweis: Verschluesselte mails koennen NICHT auf Viren geprueft werden!
> ---------------------------------------------------------

-- 
 ----------------------------
| Regards,                   |
| Stefan Jahnke              |
| BOV AG                     |
| @:D2 Vodafone, Abt.: FBOM  |
| Tel.: 0211/533-4893        |
 ----------------------------
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Stefan Jahnke
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to