Я нашел код для генератора строк из этого вопроса Create View with 365 days
CREATE VIEW year_days (the_day) AS
SELECT TRUNC(SYSDATE, 'YYYY') + (LEVEL-1) AS the_day
FROM DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),11)), 'DDD'))
/
SELECT * FROM year_days
Поскольку у меня нет привилегий CREATE, я изменил его на форму встроенного запроса:
SELECT
year_days.*
FROM
(
SELECT TRUNC(SYSDATE, 'YYYY') + (LEVEL-1) AS the_day
FROM DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),11)), 'DDD'))
) year_days
Приведенный выше код встроенного запроса отлично работает на одном из наших экземпляров Oracle 11g R2 (v11.2.0.3.0), а также на собственном LiveSQL Oracle (19c, v19.2.0.0.0).
Однако он не работает на экземпляре, на котором он должен работать, а именно на 8i (v8.1.7.4.0). Я получаю сообщение ORA-01436: CONNECT BY loop в пользовательских данных.
На первый взгляд кажется, что 8i видит в этом коде бесконечный цикл, но не 11g и выше. Почему ?
Примечание: я знаю, что 8i устарела. Я не могу это контролировать.