oracle SELECT FROM DUAL是否可以有多行?

kiz8lqtg  于 2023-03-29  发布在  Oracle
关注(0)|答案(7)|浏览(701)

我能要一些像

SELECT (1, 2, 4542, 342) FROM DUAL;

然后变成这样

|  1    |
  |  2    |
  |  4542 |
  |  342  |
kq4fsx7k

kq4fsx7k1#

不使用DUAL,而是从预构建的集合中选择以返回多行。此解决方案具有较小的语法,避免了类型转换,并避免了可能缓慢的递归查询。但也最好了解其他解决方案,因为它们在不同的上下文中都很有用。

select column_value from table(sys.odcinumberlist(1, 2, 4542, 342));

请注意,TABLE()运算符在Oracle的现代版本中是可选的,仅在旧版本中是必需的。

qq24tv8q

qq24tv8q2#

如果(1, 2, 4542, 342)是一个字符串,你可以这样做:

with cte as (
    SELECT '1, 2, 4542, 342' as str 
    FROM DUAL
)
select regexp_substr(str,'[^,]+',1,level) 
from cte
connect by level <= regexp_count(str, ',')+1
/
u7up0aaq

u7up0aaq3#

dual只有一行,但你可以使用union all

SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 4542 FROM DUAL UNION ALL
SELECT 342 FROM DUAL;

这只是在Oracle中“动态”生成表的一种方法。

oymdgrw7

oymdgrw74#

select decode(level,3,4542,4,342,level) lvl from dual connect by level <= 4
h7wcgrx3

h7wcgrx35#

双表基本上是一个虚拟表,它有一行和一列,存在于sys模式中
SELECT (1,2, 4542, 342) FROM DUAL;
这将给予你一个错误,因为你已经通过了一个以上的列在这个表中。1,2,4542,342被视为单独的列。尝试下面的查询:-
SELECT ('1,2, 4542, 342') FROM DUAL;
'1,2,4542,342'将被视为单个字符串。
对于您需要的输出,我们可以使用UNION ALL运算符。尝试以下查询:-
SELECT 1 FROM DUAL UNION ALL SELECT 2 FROM DUAL UNION ALL SELECT 4542 FROM DUAL UNION ALL SELECT 342 FROM DUAL;

xienkqul

xienkqul6#

双表可以有多行多列,例如=〉

SQL> select 1, 'john' from dual
  2  union
  3  select 2, 'smith' from dual;

         1 'JOHN
---------- -----
         1 john
         2 smith
gcmastyq

gcmastyq7#

alias的其他示例:

SELECT column_value as xvalue FROM sys.odcinumberlist(1,2,4542,342);

相关问题