一码一世界
麻雀虽小,五脏俱全

Oracle 32进制转10进制 FUNCTION

/* Formatted on 2015/1/28 15:38:48 (QP5 v5.240.12305.39446) */
CREATE OR REPLACE FUNCTION FUN_CHANGE32TO10 (PAR_32STR IN VARCHAR2)
   RETURN VARCHAR2
IS
   VAR_10STR   VARCHAR2 (20);
   VAR_STR     VARCHAR2 (10);
   VAR_INUM    NUMBER;
   VAR_COUNT   NUMBER;
   VAR_SUM     NUMBER := 0;
BEGIN
   --获取32进制字符串长度
   VAR_COUNT := LENGTH (PAR_32STR);
   
--遍历字符串,获取每个字符,并转换为相应的10进制数,再计算结果
   FOR I IN 0 .. VAR_COUNT - 1
   LOOP
      SELECT CASE UPPER (SUBSTR (PAR_32STR, VAR_COUNT - I, 1))
                WHEN 'A' THEN '10'
                WHEN 'B' THEN '11'
                WHEN 'C' THEN '12'
                WHEN 'D' THEN '13'
                WHEN 'E' THEN '14'
                WHEN 'F' THEN '15'
                WHEN 'G' THEN '16'
                WHEN 'H' THEN '17'
                WHEN 'I' THEN '18'
                WHEN 'J' THEN '19'
                WHEN 'K' THEN '20'
                WHEN 'L' THEN '21'
                WHEN 'M' THEN '22'
                WHEN 'N' THEN '23'
                WHEN 'O' THEN '24'
                WHEN 'P' THEN '25'
                WHEN 'Q' THEN '26'
                WHEN 'R' THEN '27'
                WHEN 'S' THEN '28'
                WHEN 'T' THEN '29'
                WHEN 'U' THEN '30'
                WHEN 'V' THEN '31'
                ELSE SUBSTR (PAR_32STR, VAR_COUNT - I, 1)
             END
                CASE
        INTO VAR_INUM
        FROM DUAL;


      VAR_SUM := VAR_SUM + VAR_INUM * POWER (32, I);
   END LOOP;
VAR_10STR := VAR_SUM;

   RETURN VAR_10STR;
EXCEPTION
   WHEN OTHERS
   THEN
   --处理异常,则返回‘无效32进制’
      RETURN '无效32进制';
END;
/
View Code

 

posted on 2015-01-28 16:13  难得清静  阅读(368)  评论(0)    收藏  举报