假设我想动态定义一些表格数据以在查询中使用,而不创建物理表:
+------------+------------+
|COLUMN_VALUE|COLUMN_VALUE|
+------------+------------+
|1 |a |
|2 |b |
|5 |e |
|4 |d |
|3 |c |
+------------+------------+
(注意顺序)
我怎样才能尽可能简洁明了地做到这一点?
我能想出什么(不那么漂亮):
with
x as (
select
column_value
from
table (sys.odcinumberlist(1, 2, 5, 4, 3))),
y as (
select
column_value
from
table (sys.odcivarchar2list('a', 'b', 'e', 'd', 'c')))
select
x.column_value,
y.column_value
from
x
inner join y on x.rownum = y.rownum;
但是,这不起作用,因为它与ORA-01747: invalid user.table.column, table.column, or column specification
. 显然,rownum
使用内置table()
函数时不支持伪列。
在 CTE 中使用row_number() over (order by column_value asc)
似乎很有效,但会强制对列值进行排序。这是不可取的,因为值应该按照它们在表函数中定义的顺序出现。