我想向虚拟列提供一个id列表。这将有助于我识别表中没有的那些ID。 示例:我想在下面用' WITH'生成硬编码数据集。条款
ID
12345
23456
34567
这可能在Oracle中实现吗?
答案 0 :(得分:6)
你可以使用一个集合;如果您的条目少于32k,则built-in ODCINumberList
会执行:
select * from table(sys.odcinumberlist(12345, 23456, 34567));
COLUMN_VALUE
------------
12345
23456
34567
如果您愿意,可以作为CTE:
with cte (id) as (
select * from table(sys.odcinumberlist(12345, 23456, 34567))
)
select * from cte;
ID
----------
12345
23456
34567
只要您只需要一个维度,它就比维护大量union all
语句容易一些。它也可以作为集合从应用程序层传递给查询或过程 - 例如,您可以将Java数组转换为通过JDBC传递的集合。
但是如果你有很多值,那些在运行时没有被某些外部机制提供的话,那么它们应该在某个地方的某个表中。
答案 1 :(得分:3)
这样做你想要的吗?
with ids as (
select 12345 as id from dual union all
select 23456 from dual union all
select 34567 from dual
)
select ids.*
from ids;
还有其他方法可以表达这一点。但是,简单union all
是简短列表的最简单方法。