我们有一个 Oracle 数据库,其中包含存储为十进制整数的 IP 地址 - 当手动而不是通过 Web 界面操作数据时,这非常痛苦,但是手动操作非常方便,因为网络人员不断要求我们做一些奇怪的事情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 中做很多程序性的东西。