, В любом случае, спасибо!
льный ответ на следующий вопрос:
Это ошибка, которая была исправлена в 11.2.0.3 или новее, если я правильно помню. (11.2.0.1 больше не поддерживается. 11.2.0.4 - единственный выпуск 11.2, который все еще поддерживается) - @a_horse_with_no_nameНомер ошибки 11840579, и он был исправлен в 11.2.0.3 и 12.1.0.1 - @a_horse_with_no_nameВопрос
У меня есть стол
CREATE TABLE test(
from_date date,
to_date date
);
INSERT INTO test(from_date,to_date)
--VALUES('20171101','20171115');
VALUES(TO_DATE('20171101','YYYYMMDD'),TO_DATE('20171115','YYYYMMDD'));
Следующий запрос в Oracle возвращает только одну строку (ожидается 15 строк)
WITH dateCTE(from_date,to_date,d,i) AS(
SELECT from_date,to_date,from_date AS d,1 AS i
FROM test
UNION ALL
SELECT from_date,to_date,d+INTERVAL '1' DAY,i+1
FROM dateCTE
WHERE d<to_date
)
SELECT d,i
FROM dateCTE
SQL Fiddle -http://sqlfiddle.com/#!4/36907/8
Для теста я изменил условие наi<10
WITH dateCTE(from_date,to_date,d,i) AS(
SELECT from_date,to_date,from_date AS d,1 AS i
FROM test
UNION ALL
SELECT from_date,to_date,d+INTERVAL '1' DAY,i+1
FROM dateCTE
--WHERE d<to_date
WHERE i<10 -- exit condition
)
SELECT d,i
FROM dateCTE
И получить следующий результат
| D | I |
|------------|----|
| 2017-11-01 | 1 |
| 2017-10-31 | 2 |
| 2017-10-30 | 3 |
| 2017-10-29 | 4 |
| 2017-10-28 | 5 |
| 2017-10-27 | 6 |
| 2017-10-26 | 7 |
| 2017-10-25 | 8 |
| 2017-10-24 | 9 |
| 2017-10-23 | 10 |
Почему этот рекурсивный запрос дал неверный результат в Oracle?
SQL Fiddle -http://sqlfiddle.com/#!4/36907/5
Я запустил аналогичный запрос в SQLServer, и я получил правильный результат
WITH dateCTE(from_date,to_date,d,i) AS(
SELECT from_date,to_date,from_date AS d,1 AS i
FROM test
UNION ALL
SELECT from_date,to_date,DATEADD(DAY,1,d),i+1
FROM dateCTE
WHERE d<to_date
)
SELECT d,i
FROM dateCTE
Правильный результат
d i
2017-11-01 1
2017-11-02 2
2017-11-03 3
2017-11-04 4
2017-11-05 5
2017-11-06 6
2017-11-07 7
2017-11-08 8
2017-11-09 9
2017-11-10 10
2017-11-11 11
2017-11-12 12
2017-11-13 13
2017-11-14 14
2017-11-15 15
Почему это не работает в Oracle? Какие альтернативные варианты вы можете предложить? Спасибо!
Скриншоты из реальной системы: