oracle进制--8进制与10进制互转

/*
  函数:f_8_tr_10,8进制转换为10进制
  作者:li0924
  时间:2013_07_19 
  8进制是0开头的;
*/

create or replace function f_8_tr_10(v_8_data in number)
return number
is
v_data number(18);
v_char varchar2(18);
begin
    v_char:=substr(to_char(v_8_data),1);
    select sum(data) into v_data from 
   (
    select 
    to_number(substr(upper(v_char),rownum,1))*power(8,length(v_char)-rownum) data
    from dual 
    connect by rownum<=length(v_char)     
    );
    return v_data;
exception
  when others then
  return null;
end;

 

CREATE OR REPLACE FUNCTION N10_TO_8(V_NUM NUMBER)
RETURN VARCHAR IS RESULT VARCHAR(8);
  NUM   NUMBER;
  TMP  NUMBER;
  TEMP  NUMBER;
BEGIN
NUM := V_NUM;
TMP := TRUNC(NUM / 8);
   WHILE NUM > 0 LOOP
    TEMP := MOD(NUM, 8);
    RESULT := TEMP || RESULT;
    NUM := TMP;
    TMP := TRUNC(NUM / 8);
  END LOOP;
return RESULT;
end;

 

posted @ 2013-07-20 21:26  lottu  阅读(351)  评论(0)    收藏  举报