加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 以十进制情势存储的IP地点 – PL / SQL以虚线四边形显

发布时间:2021-01-27 22:40:26 所属栏目:站长百科 来源:网络整理
导读:我们有一个Oracle数据库,个中包括存储为十进制整数的IP地点 – 这在用手操纵数据而不是通过Web界面时很是疾苦,可是手动操纵很是利便,由于收集职员不绝要求我们做一些稀疏的工作.收集界面的作者没有预推测. 有人可以提供PL / SQL或其他要领来表现这些十进制IP

我们有一个Oracle数据库,个中包括存储为十进制整数的IP地点 – 这在用手操纵数据而不是通过Web界面时很是疾苦,可是手动操纵很是利便,由于收集职员不绝要求我们做一些稀疏的工作.收集界面的作者没有预推测.

有人可以提供PL / SQL或其他要领来表现这些十进制IP作为点分十进制,即123.123.123.123名目?

即我但愿可以或许运行如下查询:

select hostname,inttoip(ip_address) from host;

并行使inttoip()进程将ip_address表现为203.30.237.2而不是3407801602.

抱负环境下,我也想要一个提供反函数的进程,譬喻

insert into host (hostname,ip_address) values ('some-hostname',iptoint('203.30.237.2'));

我有perl这样做,但我的PL / SQL / Oracle常识不敷以将其移植到PL / SQL中.

可能,在oracle上下文中运行perl作为进程说话的要领相同于postgres中的以下内容:

CREATE FUNCTION perl_func (integer) RETURNS integer AS $$
 <some perl>
$$LANGUAGE plperl;

会很棒 – 假如也许的话 – 也许会更好,由于我可以用我认识的说话在Oracle中做许多措施性的对象.

办理要领

这是您必要的成果:

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;

(关于使成果确定性和行使to_char的评述 – 感谢).

在Oracle 11G中,您可以将名目化的IP地点配置为主机表上的假造列:

alter table host
add formatted_ip_address varchar2(15)
generated always as
( 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))
) virtual;

假如必要,可觉得查询索引此列.

您的查询变为:

select hostname,formatted_ip_address from host;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读