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

PL/SQL Oracle Discussion :

ORA-01861: literal does not match format string


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut ORA-01861: literal does not match format string
    Salut tout le monde,

    J'ai un problème avec la fonction TO_DATE() !!

    Quand je lance le script 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
    DECLARE
        v_date_1              VARCHAR2(5);
        v_date_2              VARCHAR2(5);
    BEGIN
     
        v_date_1    :=  TO_CHAR(SYSDATE + 15    , 'DD/MM');
        v_date_2    :=  TO_CHAR(SYSDATE         , 'DD/MM');
     
        dbms_output.put_line(v_date_1);
        dbms_output.put_line(v_date_2);
     
        IF  TO_DATE(v_date_1, 'DD/MM') > TO_DATE(v_date_2, 'DD/MM')
        THEN
            dbms_output.put_line('YES');
        END IF;
     
    EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line(SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1, 255));
      dbms_output.put_line(dbms_utility.format_error_backtrace);
    END;
    Tout marche bien, la ligne 12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF  TO_DATE(v_date_1, 'DD/MM') > TO_DATE(v_date_2, 'DD/MM')
    ne sort pas en erreur, par contre, quand je fais la même chose dans mon package, j'ai toujours cette erreur :

    <ORA-01861: literal does not match format string>

    Mon code dans le package est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    v_date_1          :=  TO_CHAR(date_1 , 'DD/MM');
            v_date_2   :=  TO_CHAR(date_2     , 'DD/MM');
     
            IF  TO_DATE(v_date_1, 'DD/MM') > TO_DATE(v_date_2, 'DD/MM')
            THEN
                v_last_date  :=  ADD_MONTHS(date_1, -12);
                v_next_date  :=  date_1;
            ELSE
                v_last_date  :=  date_1;
                v_next_date  :=  ADD_MONTHS(date_1, 12);
            END IF;

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Probablement que les variable date_1 et date_2 sont la cause. Vérifiez leur declarations ainsi que leur valeurs.

  3. #3
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    date_1 et date_2 sont de type DATE (initialisés à SYSDATE + 15 et SYSDATE).

    v_date_1 et v_date_2 sont des VARCHAR2(5).

    Le but de mon code est de comparer 2 dates, sauf que j'aimerais les comparer en se basant sur le jour et le mois seulement !! par exemple:

    - Pour 01/03/2010 et 20/10/2009, je choisirais 01/03 (01/03 vient avant 20/10)
    - Pour 15/06/2010 et 01/01/2008, je choisirais 01/01 (01/01 vient avant 15/06)

    En d'autres mots, la comparaison doit ignorer l'année !

  4. #4
    Membre régulier
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    J'ai enfin trouvé l'erreur

    Quand cette ligne est exécutée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF  TO_DATE(v_date_1, 'DD/MM') > TO_DATE(v_date_2, 'DD/MM')
    Le système prend par défaut l'année en cours, en d'autres termes, si v_date_1 = '01/01', la fonction TO_DATE() va me retourner 01/01/2010 !

    Le bug apparaît quand je traite une date comme le 29/02 : il n'y a pas de 29/02/2010 et c'est pour ça que le code sortait en erreur !!

    Merci pour votre aide

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

Discussions similaires

  1. ORA-01861: literal does not match format string
    Par unix27 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 07/01/2013, 19h02
  2. ORA-01861: literal does not match format string
    Par Bat91 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 31/08/2010, 11h30
  3. Problème avec strptime: "does not match format"
    Par Eusebius dans le forum Général Python
    Réponses: 17
    Dernier message: 08/07/2009, 21h30
  4. [Oracle] ORA-01861: literal does not match format string
    Par habasque dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/07/2008, 21h57
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

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