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; /
学而不思则罔,思而不学则殆!
浙公网安备 33010602011771号