我有像
这样的子网的表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)
功能,它的功能与我想要的完全相同。但我无法将集合传递给此查询,因为我之前应该声明并填充集合,这样就像创建临时表一样。
答案 0 :(得分:3)
Oracle拥有您可以使用的预定义的文档集合。例如:
select column_value ip from table(sys.odcinumberlist(1,2,3));
没有一个地方包含所有记录的集合的列表。 数据库数据盒式开发人员指南的This page列出了一些比较流行的内容,例如ODCIVarchar2List
,ODCINumberList
和{{1} }。此外,Lukas Eder的this answer使用查询来查找系统集合,但并非所有系统都已记录在案。
如果Oracle只是为每个人使用的几个标准集合并给它们好名字,那将是很好的。使用ODCIDateList
是安全的,但它看起来像是一个丑陋的黑客。