Aide sur une fonction sous ORacle 8i
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:
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
Citation:
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 ;)