Bonjour,

Je suis sur une function à premirère vue assez simple mais qui ne pose des difficultées;

En paramètre 'in' je donne une date, cette dernière sera envoyée en chaine de caractère mais réduite d'un mois.

Exemple de ce que je veux obtenir:

J'appelle la fonction avec la date paramètre : '23/01/2008'
et le résultat est : 01/12/2007 donc je réduit avec un mois et 23 jours

Exmple 2 : je donne 26/12/2007 et le résultat est : 01/11/2007 donc je réduit d'un mois et 26 jours

Voici la fonction que je pensée donner les bons résultats:
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
 
 
CREATE OR REPLACE FUNCTION dateEnChaineReleveTSP(d in DATE) RETURN VARCHAR2 IS 
 
BEGIN
 
IF ( TO_CHAR(d,'MM') = '1') THEN
 
//Ligne de trace
DBMS_OUTPUT.PUT_LINE('01/12/'||to_char(d,'YYYY')-1||' '|| '00:00:00');
 
RETURN '01/12/'||to_char(d,'YYYY')-1||' '||'00:00:00';
 
END IF;
 
 
IF (LENGTH(TO_CHAR(d,'MM'))=1) THEN
 
//trace
DBMS_OUTPUT.PUT_LINE('01/0'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00');
 
RETURN '01/0'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00';
 
ELSE
 
//trace
DBMS_OUTPUT.PUT_LINE('01/'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00');
 
RETURN '01/'||(TO_CHAR(d,'MM')-1) ||'/'||TO_CHAR(d,'YYYY')||' '|| '00:00:00';
 
 
END IF;
END;
/
Je me suis apperçu que finalement la fonction n'entre jamais dans les IF et execute à chaque fois ELSE.
Avez - vous une idée pourquoi?
J'ai beau cherché à changer les if les transformations de char en date et l'inverce mais pas de réusite.



Merci d'avance pour aide.
Martin