jk's notes
  • Oracle12c辅助表

Oracle12c辅助表

在 Oracle 12c 和 19c 中, 不支持 SELECT 直接生成表值. 在 23c 中是支持的. 也就是说下面 SQL 会失败:

SELECT 123;

在早期的数据库中, 需要借助于辅助表 DUAL 来查询.

  • 该表不实际存储数据, 是一个虚拟表
  • 该表只有一行一列, 值为 X, 列名是: DUMMY

借助于该表与 CTE 可以构建任意的辅助表.

例如需要单个表时:

SELECT 123 FROM DUAL;

例如需要一个 0 到 99 的辅助表, 可以写成:

WITH tbl AS (
     SELECT 0 AS n FROM DUAL UNION ALL
     SELECT 1 AS n  FROM DUAL UNION ALL
     SELECT 2 AS n  FROM DUAL UNION ALL
     SELECT 3 AS n  FROM DUAL UNION ALL
     SELECT 4 AS n  FROM DUAL UNION ALL
     SELECT 5 AS n  FROM DUAL UNION ALL
     SELECT 6 AS n  FROM DUAL UNION ALL
     SELECT 7 AS n  FROM DUAL UNION ALL
     SELECT 8 AS n  FROM DUAL UNION ALL
     SELECT 9 AS n  FROM DUAL
)
SELECT 
     t1.n * 10 + t2.n num 
FROM      
     tbl t1 
     CROSS JOIN 
     tbl t2 
ORDER BY num;
Last Updated:
Contributors: jk