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;
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;
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
快给分!