从列表中作为虚拟列的虚拟值

use*_*702 0 sql oracle

我想提供一个虚拟列的ID列表.这将有助于我识别表中没有的那些ID.示例:我想使用'WITH'子句生成下面的硬编码数据集

ID
12345
23456
34567
Run Code Online (Sandbox Code Playgroud)

这可能在Oracle中实现吗?

Ale*_*ole 6

你可以使用一个集合; 如果你的内容少于32k,那么内置ODCINumberList函数会:

select * from table(sys.odcinumberlist(12345, 23456, 34567));

COLUMN_VALUE
------------
       12345
       23456
       34567
Run Code Online (Sandbox Code Playgroud)

或者作为CTE,如果您愿意:

with cte (id) as (
  select * from table(sys.odcinumberlist(12345, 23456, 34567))
)
select * from cte;

        ID
----------
     12345
     23456
     34567
Run Code Online (Sandbox Code Playgroud)

union all只要你只需要一个维度,它就比维护大量语句容易一些.它也可以作为集合从应用程序层传递给查询或过程 - 例如,您可以将Java数组转换为通过JDBC传递的集合.

但是如果你有很多值,那些在运行时没有被某些外部机制提供,那么它们应该在某个地方的某个表中.