Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2007, 13h20   #1
Futur Membre du Club
 
Inscription : mars 2004
Messages : 63
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 63
Points : 15
Points : 15
Par défaut Formatage date Fonction

Bonjour,

Merci d'avance aux personnes passant sur ce fil et essayant de m'aider, je sens que la question à déjà du être possée des milliers de fois, mais j'avoue m'emeller les pinceaux depuis une bonne heure et avoir besoin d'un regard neuf sur mon soucis , que voici .

La fonction suivante
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
CREATE OR REPLACE FUNCTION is_vacant(numod IN VARCHAR2) RETURN VARCHAR2 IS
 
 wresult DATE;
wrenvoi VARCHAR2(15);
BEGIN
  -- initialisation
  wresult := '01-JAN-2007';
 
  wrenvoi := '';
 
  SELECT to_date(deb_vac)
  INTO wresult
  FROM vmt_vacant
  WHERE num_mod = numod
   AND vacant = 'OUI';
 
  IF(wresult IS NOT NULL) THEN
    wrenvoi := 'OUI(' || to_date(wresult) || ')';
    RETURN wrenvoi;
  ELSE
    wrenvoi := 'NON';
    RETURN wrenvoi;
  END IF;
 
END;
Me pose un soucis.
Le champs deb_vac de la vue VMT_VACANT est formaté ainsi TO_CHAR(champsdate,'DD-MON-YYYY') "deb_vac" .
En revanche dans ma fonction, je n'ai pas réussi à me dépatoullier differement que faire ressortir le renvoi sous la forme
" OUI(DD/MM/YY) "

Ma question est simple : que dois-je modifier pour obtenir en sorti un format de la forme " OUI(DD-MON-YYYY)"

Merci encore pour vos réponses.

Cordialement
JD
jdotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 13h32   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
bah faut pas faire un TO_DATE tout simplement TO_DATE d'une date ça n'a aucun sens

Code :
wrenvoi := 'OUI(' || to_char(wresult,'DD-MON-YYYY') || ')';
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 14h01   #3
Futur Membre du Club
 
Inscription : mars 2004
Messages : 63
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 63
Points : 15
Points : 15
Bonjour et merci pour votre réponse...

Malheureusement j'avais déjà essayé de proceder ainsi puisque c'est la transformation que j'effectue de la table T1 vers la vue VMT_VACANT (utilisée pour la fonction) ...

Voici le message que j'obtiens sur je procéde ainsi :
Code :
1
2
3
ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur
ORA-06512: à "LOGI.IS_VACANT", ligne 18
ORA-06512: à ligne 7
Merci pour la suite...

Cordialement
JD
jdotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 14h28   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
déjà, au strict sens esthétique ce serait plus "joli" comme ça :

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
CREATE OR REPLACE FUNCTION is_vacant(numod IN VARCHAR2) RETURN VARCHAR2 IS
 
wresult DATE;
wrenvoi VARCHAR2(15);
BEGIN
 
BEGIN
  SELECT deb_vac
     INTO wresult
    FROM vmt_vacant
  WHERE num_mod = numod
      AND vacant = 'OUI'
      AND to_date(deb_vac) IS NOT NULL;
 
    wrenvoi := 'OUI(' || to_date(wresult) || ')';
 
EXCEPTION WHEN NO_DATA_FOUND THEN
    wrenvoi := 'NON';
END;
 
RETURN wrenvoi;
 
END;
/
la colonne deb_vac ne serait-elle pas déjà de format DATE ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 16h55   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Ben non, il a dit que c'était une vue et la colonne : TO_CHAR(champsdate,'DD-MON-YYYY') "deb_vac"

Mais dans ton code, je changerait ça
Code :
wrenvoi := 'OUI(' || to_date(wresult) || ')';
par
Code :
 wrenvoi := 'OUI(' || to_char(to_date(wresult, 'DD-MON-YYYY'), 'DD/MM/YY') || ')';
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 16h58   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Et aussi
Code :
AND to_date(deb_vac) IS NOT NULL;
par
Code :
AND deb_vac IS NOT NULL;
-- Conversion inutile
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 13h57   #7
Futur Membre du Club
 
Inscription : mars 2004
Messages : 63
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 63
Points : 15
Points : 15
Bonjour à tous et merci à vous deux pour vos réponses , qui même si elles ne m'ont pas encore apportées la solution, m'ont déjà appris pas mal de chose ...

Donc le nouveau code de la fonction est le suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION is_vacant(numod IN VARCHAR2) RETURN VARCHAR2 IS
 
wresult DATE;
wrenvoi VARCHAR2(15);
BEGIN
 
BEGIN
  SELECT deb_vac
     INTO wresult
    FROM vmt_vacant
  WHERE num_mod = numod
      AND vacant = 'OUI'
      AND deb_vac IS NOT NULL;
 
    wrenvoi := 'OUI(' || to_char(to_date(wresult,'DD/MM/YYYY'),'DD-MON-YYYY') || ')';
 
EXCEPTION WHEN NO_DATA_FOUND THEN
    wrenvoi := 'NON';
END;
 
RETURN wrenvoi;
 
END;
J'ai donc compilé vos conseils... et obtenu le message d'erreur suivant
Code :
1
2
3
ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur
ORA-06512: à "LOGI.IS_VACANT", ligne 15
ORA-06512: à ligne 7
Puis lancé une recherche sur le net , et trouvé mon bonheur dans les archives de ... developpez.net bien sur ( http://www.developpez.net/forums/arc...p/t-60867.html )

Après quelque test, le soucis venait de la longueur de ma variable wrenvoi VARCHAR2(15); parce que OUI(JJ-MON-YYYY) = 16 caractéres ou non pas 15...
Honte à moi !

Voici donc la fonction finallement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION is_vacant(numod IN VARCHAR2) RETURN VARCHAR2 IS
 
wresult VARCHAR2(12);
wrenvoi VARCHAR2(16);
BEGIN
 
BEGIN
  SELECT to_char(to_date(deb_vac),'DD-MON-YYYY')
     INTO wresult
    FROM vmt_vacant
  WHERE num_mod = numod
      AND vacant = 'OUI'
      AND deb_vac IS NOT NULL;
 
    wrenvoi := 'OUI(' || wresult || ')';
 
EXCEPTION WHEN NO_DATA_FOUND THEN
    wrenvoi := 'NON';
END;
 
RETURN wrenvoi;
 
END;
Et hop , un de plus : Résolu !

Merci encore à tous les deux !
jdotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h37.


 
 
 
 
Partenaires

Hébergement Web