Wyrażenie rekurencyjne CTE

0

Witam
Mam problem z przepisaniem wyrażenia rekurencyjnego CTE z bazy SQL Server na Oracle. Na SQL Server dostaje poprawne wyniki czyli więcej niż 1 a w bazie Oracle tylko jeden który jest zaczepieniem rekurencji.

SQL Server

WITH D AS
(
	SELECT CAST('2014-07-01' AS DATE) AS DateValue

	UNION ALL
	
	SELECT 
		DATEADD(M, 1, DateValue) AS DateValue
	FROM D
	WHERE DateValue < '2015-01-01'

)
SELECT * FROM D

Oracle

WITH D (DateValue) AS
(
  SELECT CAST('2014-07-01' AS DATE) AS DateValue FROM DUAL
  
  UNION ALL
  
  SELECT ADD_MONTHS(DateValue, 1) AS DateValue FROM D
  WHERE DateValue < '2015-01-01'
)
SELECT * FROM D;
0

Na postgreSQL musiałby dodać RECURSIVE ..

0

Sprawdziłem i w Oracle nie ma potrzeby tego dodawać, jakby ktoś mógł mnie nakierować co złego jest w tym zapytaniu dla bazy Oracle, bo szukałem już dość długo i nie znalazłem żadnych specyficznych rzeczy względem SQL Server.

0

Podeślij DDL + probke danych i oczekiwany wynik.

0

To zapytanie nie działa na żadnych tabelach oraz danych, po prostu chce sobie wygenerować sekwencje dat, w podanym wyżej kodzie chodzi mi o wygenerowanie wszystkich dat z przedziału w interwale równym jednemu miesiącowi.

A docelowym zadaniem jest wygenerować daty dla pierwszych czwartków każdego miesiąca miesiąca z zadanego przedziału.

1

W Oracle możesz tak wygenerować wszystkie daty z zakresu:

SELECT to_date('2014-07-01','YYYY-MM-DD') + dayDiff
FROM
   (
     SELECT LEVEL - 1 dayDiff FROM DUAL 
     CONNECT BY LEVEL <= (to_date('2015-01-01','YYYY-MM-DD')-to_date('2014-07-01','YYYY-MM-DD')) 
   )
 
0

To rozwiązuje mój problem, ale czy byłbyś w stanie wytłumaczyć czemu wyrażenie które napisałem w pierwszym poście nie działa na bazie Oracle? O ile dobrze sprawdziłem to jest one zgodne ze standardem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1