WITH RECURSIVE cte (n) AS
(
SELECT 1
UNION ALL
SELECT n 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
I copied the above code from Oracle documentation. It works fine when I run it in MySQL, but I get the error message "Error at line 1/16: ORA-00905: missing keyword" when I run it in Oracle's Apex workshop. It is strange that a sample from Oracle documentation does not work. Any idea what the problem is?
CodePudding user response:
It is syntactically invalid to have RECURSIVE
in the query. Whichever documentation you used it was not for an Oracle database; you want this documentation.
Additionally, SELECT 1
is not valid as you have a SELECT
without a FROM
clause; it should be SELECT 1 FROM DUAL
.
The fixed code should be:
WITH cte (n) AS
(
SELECT 1 FROM DUAL
UNION ALL
SELECT n 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
Which outputs:
N |
---|
1 |
2 |
3 |
4 |
5 |
CodePudding user response:
In oralce, you can't use SELECT 1, that is only allowed in Mysql
As is aid ORACLE rdms is not Mysql RDMS
select * from V$VERSION;
BANNER | BANNER_FULL | BANNER_LEGACY | CON_ID |
---|---|---|---|
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production | Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 |
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production | 0 |
WITH cte (n) AS
(
SELECT 1 FROm DUAL
UNION ALL
SELECT n 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
N |
---|
1 |
2 |
3 |
4 |
5 |