是否可以使用SELECT FROM DUAL多行?

时间:2018-05-07 10:30:46

标签: sql oracle

我可以拥有像

这样的东西吗?
SELECT (1, 2, 4542, 342) FROM DUAL;

并且这样得到它?

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

6 个答案:

答案 0 :(得分:6)

如果(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
/

答案 1 :(得分:5)

没有。 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;

这只是生成表格的一种方式&#34;即时“#34;在Oracle中。

答案 2 :(得分:5)

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

答案 3 :(得分:5)

而不是DUAL,将TABLE运算符与预构建的集合结合起来以返回多行。此解决方案具有较小的语法,可避免类型转换,并避免可能较慢的递归查询。但是理解其他解决方案也很好,它们在不同的环境中都很有用。

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

答案 4 :(得分:0)

双表基本上是一个虚表,它有一行一列,存在于sys schema

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

这会给您一个错误,因为您在此表中传递了多个列。 1,2,4542,342作为单独的列处理。请尝试以下查询: -

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

&#39; 1,2,445,442&#39;将被视为单个字符串。

对于您所需的输出,我们可以使用 UNION ALL 运算符。请尝试以下查询: -

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

答案 5 :(得分:0)

双表可以具有多行和多列,例如=>

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

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