По мое мнение, „Рекурсивно факторизиране на подзаявки“ е нарушено в 11g R2 за заявки с колона за дата или време.
с test(X) as( select to_date('2010-01-01','YYYY-MM-DD') from dual union all ( select (X + 1) from test where X <=to_date ('2010-01-10','YYYY-MM-DD') ))изберете * от тест;ORA-01790
използвайте преобразуване, за да конвертирате типа данни:
with test(X) as( select cast(to_date('2010-01-01','YYYY-MM-DD') as date) from dual union all ( select (X + 1) from test където X <=to_date('2010-01-10','YYYY-MM-DD') ))изберете * от тест;X-------------------2010 -01-01 00:00:001 избран ред
Прехвърлянето на дата в дата помага, но къде са другите резултати?
Става още по-добре...
Опитайте с друга начална дата:
with test(X) as( select cast(to_date('2007-01-01','YYYY-MM-DD') as DATE) from dual union all ( select (X + 1) from test където X <=to_date('2011-01-11','YYYY-MM-DD') ))изберете * от тест където rownum <10; -- важно!X-------------------2007-01-01 00:00:002006-12-31 00:00:002006-12-30 00:00 :002006-12-29 00:00:002006-12-28 00:00:002006-12-27 00:00:002006-12-26 00:00:002006-12-25 00:00:002006-12- 24 00:00:009 избрани реда
Броене назад? Защо?
Актуализация от 14 януари 2014 г.: Като заобиколно решение използвайте CTE, започвайки с крайната дата и изграждайки рекурсивния CTE назад, като това:
with test(X) as( select cast(to_date('2011-01-20','YYYY-MM-DD') as DATE) as x from dual union all ( select cast(X - 1 КАТО ДАТА) от тест, където X> to_date('2011-01-01','YYYY-MM-DD') ))изберете * от тест
Резултати:
<предварителен код>| X ||--------------------------------|| 20 януари 2011 г. 00:00:00+0000 || 19 януари 2011 г. 00:00:00+0000 || 18 януари 2011 г. 00:00:00+0000 || 17 януари 2011 г. 00:00:00+0000 || 16 януари 2011 г. 00:00:00+0000 || 15 януари 2011 г. 00:00:00+0000 || 14 януари 2011 г. 00:00:00+0000 || 13 януари 2011 г. 00:00:00+0000 || 12 януари 2011 г. 00:00:00+0000 || 11 януари 2011 г. 00:00:00+0000 || 10 януари 2011 г. 00:00:00+0000 || 09 януари 2011 г. 00:00:00+0000 || 08 януари 2011 г. 00:00:00+0000 || 07 януари 2011 г. 00:00:00+0000 || 06 януари 2011 г. 00:00:00+0000 || 05 януари 2011 г. 00:00:00+0000 || 04 януари 2011 г. 00:00:00+0000 || 03 януари 2011 г. 00:00:00+0000 || 02 януари 2011 г. 00:00:00+0000 || 01 януари 2011 г. 00:00:00+0000 |Тестът е проведен с:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64-битово производство