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:
Et les messages d'erreurs
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
Si quelqu'un pouvait m'aiguiller sur les origines du problèmes, ca serait coolErreur(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
Partager