gpt4 book ai didi

sql - Oracle 对来自 PostgreSQL 的 unnest 数组的模拟

转载 作者:行者123 更新时间:2023-11-29 11:41:34 31 4
gpt4 key购买 nike

我有像这样的子网表

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) 函数,它的作用与我想要的完全相同。但是我不能将集合传递到这个查询中,因为我应该在之前声明和填充集合,这样就和创建临时表一样了。

最佳答案

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

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

没有一个地方包含所有文档化集合的列表。 This page Database Data Cartridge Developer's Guide 的部分列出了一些比较流行的,例如 ODCIVarchar2ListODCINumberListODCIDateList。另外,this answer作者:Lukas Eder 使用查询来查找系统集合,尽管并未记录所有这些集合。

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

关于sql - Oracle 对来自 PostgreSQL 的 unnest 数组的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319862/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com