繁体   English   中英

递归 CTE 在 Oracle SQL 上给出“第 1/16 行错误:ORA-00905:缺少关键字”错误

[英]Recursive CTE gives "Error at line 1/16: ORA-00905: missing keyword" error on Oracle SQL

    WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;

我从 Oracle 文档中复制了上述代码。 当我在 MySQL 中运行它时,它运行良好,但是当我在 Oracle 的 Apex 研讨会中运行它时,我收到错误消息“第 1/16 行错误:ORA-00905:缺少关键字”。 奇怪的是 Oracle 文档中的示例不起作用。 知道问题是什么吗?

在查询中使用RECURSIVE在语法上是无效的。 无论您使用哪个文档,它都不是 Oracle 数据库; 你想要这个文档

此外, SELECT 1无效,因为您的SELECT没有FROM子句; 它应该是SELECT 1 FROM DUAL

固定代码应该是:

WITH cte (n) AS
(
  SELECT 1 FROM DUAL
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;

哪个输出:

ñ
1
2
3
4
5

小提琴

在 oralce 中,您不能使用 SELECT 1,这仅在 Mysql 中允许

正如援助 ORACLE rdms 不是 Mysql RDMS

select * from V$VERSION;
横幅 BANNER_FULL BANNER_LEGACY CON_ID
Oracle Database 21c Express Edition Release 21.0.0.0.0 - 生产 Oracle Database 21c Express Edition Release 21.0.0.0.0 - 生产
版本 21.3.0.0.0
Oracle Database 21c Express Edition Release 21.0.0.0.0 - 生产 0
    WITH  cte (n) AS
(
  SELECT 1 FROm DUAL
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
ñ
1
2
3
4
5

小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM