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.
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.
相关文章
- 忘记oracle的sys用户密码如何修改以及Oracle 11g 默认用户名和密码
- Oracle数据库使用出现错误-状态: 失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
- 理解ORACLE 字符集【转】
- 【Oracle】oracle的LAG和LEAD分析函数
- 【Oracle】使用hanganalyze 命令分析数据库hang【转】
- 【Oracle】RMAN-03009 ORA-01400 错误解决方法
- 《oracle每日一练》Oracle DBLink连接数过多的问题(Ora-02020)
- oracle:查询数据表是否存在
- ORACLE SQL Developer日期显示格式设置
- ORACLE查看数据库安装补丁情况
- oracle常用函数使用大全 Oracle除法(转)
- Oracle 存储过程调用返回游标的另一个存储过程。
- cx_Oracle连接oracle数据库
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
- Some tricks when using cx_Oracle
- Oracle 创建普通用户,并赋予权限
- Oracle中会话与事务有什么区别?
- Oracle case when用法
- Oracle用户、权限、角色管理
- System.BadImageFormatException: 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- System.BadImageFormatException: 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上)
- 【Mysql异构实时同步Oracle】OGG12异构同步mysql到oracle(windows mysql实时同步数据到linux oracle)详细文档