4

我有像子网这样的表

cidr | ip

我想通过所属 ips 列表选择子网。在 postgres 我可以这样做:

select 
    ips.ip, net.uid, net.cidr 
from 
    TBL_SID_SUBNETWORK net, 
    (select unnest(ARRAY[1,2,3]) ip) ips 
where 
    cast (((2^net.cidr) - 1) as bigint)<<(32 - net.cidr) & ips.ip =  net.ipaddress

在 postgres 中,我可以传递数组并将其用作表格。

select ips.ip from
(select unnest(ARRAY[1,2,3]) ip) ips

|ip|
 1
 2
 3

是否有可能在 Oracle 中做类似的事情?在一个查询中?我不想创建、填充和删除其他表,因为我间接使用 DB,并且事务由应用程序配置管理。

我知道 Oracle 的TABLE(collection)功能与我想要的功能相同。但是我不能将集合传递给这个查询,因为我应该在之前声明和填充集合,这样就和创建临时表一样。

4

1 回答 1

6

Oracle 具有您可以使用的预定义、记录在案的集合。例如:

select column_value ip from table(sys.odcinumberlist(1,2,3));

没有一个地方包含所有记录集合的列表。 Database Data Cartridge Developer's Guide这一页列出了一些比较流行的,例如、和。此外, Lukas Eder 的这个答案使用查询来查找系统集合,尽管并非所有这些集合都记录在案。ODCIVarchar2ListODCINumberListODCIDateList

如果 Oracle 只提供几个标准集合供大家使用并给它们起好听的名字,那就太好了。它使用起来很安全,sys.odcinumberlist但它看起来像一个丑陋的黑客。

于 2015-02-05T08:57:52.133 回答