IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Formatage date Fonction


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 39
    Points
    39
    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 : 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
    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

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    bah faut pas faire un TO_DATE tout simplement TO_DATE d'une date ça n'a aucun sens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wrenvoi := 'OUI(' || to_char(wresult,'DD-MON-YYYY') || ')';

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    déjà, au strict sens esthétique ce serait plus "joli" comme ça :

    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
    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 ?

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    wrenvoi := 'OUI(' || to_date(wresult) || ')';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     wrenvoi := 'OUI(' || to_char(to_date(wresult, 'DD-MON-YYYY'), 'DD/MM/YY') || ')';
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Et aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND to_date(deb_vac) IS NOT NULL;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND deb_vac IS NOT NULL;
    -- Conversion inutile
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formatage dates heures
    Par leglofeur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/12/2005, 09h37
  2. [Dates] Fonction date
    Par dafalri dans le forum Langage
    Réponses: 18
    Dernier message: 13/12/2005, 11h27
  3. [Dates] Fonction sleep
    Par nebule dans le forum Langage
    Réponses: 7
    Dernier message: 15/11/2005, 15h39
  4. Réponses: 3
    Dernier message: 18/10/2005, 15h34
  5. Réponses: 8
    Dernier message: 05/05/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo