create or replace function FromLongToDottedText(arg in integer) return varchar2 is
  Result varchar2(20);
  p1 integer ;
  p2 integer ;
  p3 integer ;
  p4 integer ;
begin
p1:= mod(arg/(256*256*256) - 0.5,256);
p2:= mod(( arg/(256*256)) - 0.5,256);
p3:= mod(( arg/(256)) - 0.5,256);
p4:= mod(( arg/(1)),256); result:=p1||'.'||p2||'.'||p3||'.'||p4;  return(Result);
end FromLongToDottedText;
                         

解决方案 »

  1.   

    select FromLongToDottedText(to_number('40A238F2','XXXXXXXX')) from dual
      

  2.   

    create or replace function FromDottedTextToLong(arg in varchar2) return number is
      Result number(24);  pos1 integer ;
      pos2 integer ;
      i integer ;
    begin
          Result := 0 ;
          pos1 :=0 ;
          pos2 := length(arg) ;
          i := 1 ;
          while i <=4 LOOP 
              pos1 := instr(arg,'.',-1,i) ;
              --没找到最后一次累加
              if pos1=0 then
              i := 4;
              end if;
              dbms_output.put_line(to_number(substr(arg,pos1+1,pos2-pos1))) ;
              Result := Result + to_number(substr(arg,pos1+1,pos2-pos1))*power(256,i-1) ;
              pos2 := pos1 - 1 ;
              i := i + 1 ;
          END LOOP;

      return(Result);
    end FromDottedTextToLong;
                             
    select ltrim(to_char(FromDottedTextToLong('64.162.56.242'),'XXXXXXXX')) AS HEX from dual
    快给分!