Bonjour à tous,

Voila mon problème, j'ai adapté une fonction aux "Standards" SQL qui normalement fonctionne sous SQL Server et Oracle, or bien qu'elle fonctionne au poil sous SQL Server, elle ne semble pas fonctionner sous Oracle (ici une version 8i) et les messages d'erreurs ne me semblent pas hyper compréhensibles non plus...
Cette fonction, en fonction d'une date et d'un paramètre calcule une autre date en fonction des jours ouvrés/fériés situés dans une table (Tbl_IN_CALENDRIER), elle me permet de calculer une date au plus tard en fonction d'un délai paramétré.

Voici la fonction d'origine:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
CREATE FUNCTION GetWorkingDay
(
	@date_init date
   ,@delai int = 0
)
RETURNS date
AS
BEGIN
	DECLARE @NewDate AS date
	DECLARE @sign AS int
 
	SET @sign = SIGN(@delai)
 
	-- Si la date passée en paramètre est un JF alors on recherche la date SUIVANTE qui est ouvrée
	WHILE (SELECT 1 FROM [dbo].[tbl_in_calendrier] WHERE [FLAG_OUVRE] = 0 AND [DAT_JOUR] = @date_init) IS NOT NULL BEGIN
		SET @date_init = DATEADD(DD, 1, @date_init)
	END
 
	SET @NewDate = @date_init
 
	-- Tant que delai n'est pas à 0 on retire un jour, si c'est un jour férié on ne le retire pas de délai
	WHILE @delai != 0 BEGIN
		IF (SELECT 1 FROM [dbo].[tbl_in_calendrier] WHERE [FLAG_OUVRE] = 0 AND [DAT_JOUR] = @NewDate) IS NOT NULL BEGIN
			SET @NewDate = DATEADD(DD, @sign, @NewDate)
		END
		ELSE BEGIN
			SET @NewDate = DATEADD(DD, SIGN(@delai), @NewDate)
			SET @delai += -@sign
		END
	END
 
	-- Si la date finale trouvée est un JF alors on recherche la date précédente ou suivante (fonction du signe du délai) qui est ouvrée
	WHILE (SELECT 1 FROM [dbo].[tbl_in_calendrier] WHERE [FLAG_OUVRE] = 0 AND [DAT_JOUR] = @NewDate) IS NOT NULL BEGIN
		SET @NewDate = DATEADD(DD, @sign, @NewDate)
	END
 
	RETURN @NewDate
END
Et les messages d'erreurs
Erreur(11,11): PLS-00103: Symbole "DATE" rencontré à la place d'un des symboles suivants : . ( * @ % & = - + ; < / > at in is mod remainder not rem <exposant (**)> <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_ between || multiset member SUBMULTISET_ Symbole "." a été substitué à "DATE" pour continuer.
Erreur(17,2): PLS-00103: Symbole "WHILE" rencontré à la place d'un des symboles suivants : . ( * % & = - + ; < / > at in is mod remainder not rem <exposant (**)> <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_ between || multiset member SUBMULTISET_ Symbole "(" a été substitué à "WHILE" pour continuer.
Erreur(17,23): PLS-00103: Symbole "[" rencontré à la place d'un des symboles suivants : ( <identificateur> <identificateur entre guillemets> table the
Si quelqu'un pouvait m'aiguiller sur les origines du problèmes, ca serait cool