Oracle には、PostgreSQL の GENERATE_SERIES に相当する関数がない

表題の件、では代わりにストアド FUNCTION でも代替案があるのだろうが、
ストアド FUNCTION 定義の権限がない時、
WITH句で対応する方法がある。

数値の例

WITH generate_series(n) AS (
   SELECT 1 FROM dual
   UNION ALL
   SELECT n + 1 FROM generate_series WHERE n + 1 <= 5
)
SELECT n AS A_NUM FROM generate_series

Oracle 11g 以降では、CONNECT BY level を使って
https://docs.oracle.com/cd/E16338_01/server.112/b56299/pseudocolumns001.htm#i1009261
1~10は、

SELECT level FROM dual CONNECT BY level <= 10

日付(加算+1day)の例⇒DATE型

WITH generate_series(n) AS (
    SELECT SYSDATE FROM dual
    UNION ALL
    SELECT n + 1 FROM generate_series WHERE n + 1 < SYSDATE + 5
)
SELECT n AS A_DATA FROM generate_series

年度、年月の文字列で結果が欲しい時
2024 年度の 年4桁月2桁の文字列で、、、
ADD_MONTHS を使う

WITH generate_series(x) AS (
    SELECT TO_DATE('2024-04-01','YYYY-MM-DD') FROM dual
    UNION ALL
    SELECT ADD_MONTHS(x, 1) FROM generate_series WHERE ADD_MONTHS(x, 1) < TO_DATE('2025-04-01','YYYY-MM-DD')
)
SELECT TO_CHAR(x, 'YYYYMM') AS YEAR_MONTH FROM generate_series

結果

202404
202405
202406
202407
202408
202409
202410
202411
202412
202501
202502
202503

これら同じものを、PostgreSQL で書く時は、Oracle では、WITH句に 再帰の意味、RECURSIVE
を省略していたが、PostgreSQL では省略せずに、WITH RECURSIVE と記述する。

PostgreSQL の場合の同じ書き方
--- 数値 PostgreSQL の例 ---

WITH RECURSIVE generates(n) AS (
   SELECT 1 
   UNION ALL
   SELECT n + 1 FROM generates WHERE n + 1 <= 5
)
SELECT n FROM generates

--- 日付 PostgreSQL の例 ---

WITH RECURSIVE generates(n) AS (
    SELECT CURRENT_TIMESTAMP 
    UNION ALL
    SELECT n + CAST('1 days' AS INTERVAL) FROM generates 
    WHERE n + CAST('1 days' AS INTERVAL) < CURRENT_TIMESTAMP + CAST('5 days' AS INTERVAL)
)
SELECT n AS A_DATA FROM generates

--- 年度の年月文字列 PostgreSQL の例 --

WITH RECURSIVE generates(x) AS (
    SELECT to_timestamp('2024-04-01','YYYY-MM-DD') 
    UNION ALL
    SELECT x + CAST('1 month' AS INTERVAL) FROM generates WHERE x + CAST('1 month' AS INTERVAL) < TO_DATE('2025-04-01','YYYY-MM-DD')
)
SELECT TO_CHAR(x, 'YYYYMM') AS YEAR_MONTH FROM generates