zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle中IP地址和掩码转换成CIDR格式

Oracle 格式 IP地址 转换成 掩码
2023-09-11 14:19:44 时间
遇到的问题如下:数据库中存储了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 , (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 ;
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)); 最新内容请见作者的GitHub页:http://qaseven.github.io/
深入解析Oracle IMU模式下的REDO格式 1、什么是IMU? 2、在哪些场景下不会使用IMU特性?(Oracle10g出现了IMU,默认开启IMU) 3、如何手动关闭IMU? 4、谈谈一条UPDATE语句从第一步到第九步的整个过程?在IMU模式下对REDO日志做DUMP分析(上图所示:IMU模式的REDO格式)。 5、IMU的主要作用是什么,也就是说为了解决什么问题?
Oracle分页查询格式(十三) Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。 这篇介绍HASH SORT CLUSTER表对分页查询的帮助。 Oracle分页查询格式(一):http://yangtingkun.
Oracle分页查询格式(十二) Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。 这篇介绍分析函数用于分页,且排序字段上包含索引的情况。 Oracle分页查询格式(一):http://yangtingkun.