??????????????????:??????д洢??IP????????IP?????????????????????CIDR???????????????????????????CIDR?????????????????????е?IP????????????????????????IP?????58.247.221.238????????255.255.255.252?????????????58.247.221.236/30??
???????????:???????????IP????????????λ?????????????????????.Google??£???????IPv4?????????????????????????????????????????????????Oracle ?????bitand??????????????????????IP??????????????????IP???????????????????λ??????????????????????????????????????????????????????????????????????????/????CIDR??????????????????????????CIDR?????????????????????.
???????????????: ????58.247.221.236
????Sql????
????select inttoip(BITAND(dottedQuadToNumber('58.247.221.238')??
????ottedQuadToNumber('255.255.255.252'))) from dual
??????: ??????????????????:
????Sql????
CREATE OR REPLACE function dottedQuadToNumber ( dottedQuad IN VARCHAR2) return number is
Result NUMBER;
begin
Result:= (substr(dottedQuad ??
1??
(instr(dottedQuad ?? '.'?? 1?? 1 ) - 1))
* 256 * 256 * 256
) +
(substr(dottedQuad ??
instr(dottedQuad ?? '.'?? 1?? 1 ) + 1??
instr(dottedQuad ?? '.'?? 1?? 2 ) -
instr(dottedQuad ?? '.'?? 1?? 1 ) - 1) * 256 * 256
) +
(substr(dottedQuad ??
instr(dottedQuad ?? '.'?? 1?? 2 ) + 1??
instr(dottedQuad ?? '.'?? 1?? 3 ) -
instr(dottedQuad ?? '.'?? 1?? 2 ) - 1) * 256
) +
(substr(dottedQuad ??
instr(dottedQuad ?? '.'?? 1?? 3 ) + 1)
) ;
return(Result );
end dottedQuadToNumber ;
???????????ip????????:
????Sql????
CREATE OR REPLACE function inttoip(ip_address integer) return varchar2
deterministic
is
begin
return to_char(mod(trunc(ip_address /256/ 256/256 )??256))
|| '.'|| to_char(mod(trunc(ip_address/ 256/256 )??256))
|| '.'|| to_char(mod(trunc(ip_address/ 256)??256 ))
|| '.'|| to_char(mod(ip_address?? 256));
end;