【发布时间】:2015-04-03 21:15:04
【问题描述】:
我有一个带有子网的表
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) 函数与我想要的功能相同。但是我不能将collection传递给这个查询,因为我应该在之前声明和填充collection,这样就和创建临时表一样。
【问题讨论】:
-
TABLE的问题只是你不想定义一个集合吗?如果是这样,您可以使用预定义的、记录在案的集合。例如:select column_value ip from table(sys.odcinumberlist(1,2,3)); -
嗨,@JonHeller 是的,您的解决方案效果很好。谢谢!
标签: sql oracle postgresql unnest