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
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut ORA-01861: literal does not match format string
    Salut,j'ai essayé plusieurs choses mais impossible de trouver la solution pour le moment

    voila j'ai l'erreur suivante:
    ORA-01861: literal does not match format string
    le bout de code qui plante est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT GET_NEXT_DAY(TO_CHAR(DT_PARM,'YYYYMMDD')) INTO TOTO FROM TPARAM WHERE CD_PARM='FFVV';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    create or replace
    FUNCTION GET_NEXT_DAY(CURDAY VARCHAR2) 
    RETURN VARCHAR2 IS 
    NDAY VARCHAR2(10);
    BEGIN 
    	  SELECT TO_CHAR(MIN(DT_PARAM),'YYYYMMDD') INTO NDAY  
    	  FROM TCAL
    	  WHERE IND_VV='sw'
    	  AND DT_PARAM > TO_DATE(CURDAY,'YYYYMMDD');
    RETURN NDAY;
    END;

    Avez vous une idée sur cette erreur plz?
    à consulter avant de poster ... la FAQ de C#

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous aimez les conversions (inutiles) !

    On verra ça après.
    Pour comprendre l'erreur collez des dbms_output sur tous vos varchar2 :
    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
    CREATE OR REPLACE FUNCTION GET_NEXT_DAY(CURDAY VARCHAR2) 
    RETURN VARCHAR2 IS 
        NDAY VARCHAR2(10);
    BEGIN
        dbms_output.enable;
        dbms_output.put_line('CURDAY : ' || CURDAY);
     
        SELECT TO_CHAR(MIN(DT_PARAM),'YYYYMMDD')
          INTO NDAY
          FROM TCAL
         WHERE IND_VV = 'sw'
           AND DT_PARAM > TO_DATE(CURDAY,'YYYYMMDD');
     
        dbms_output.put_line('NDAY : ' || NDAY);
    RETURN NDAY;
     
    END;
    /
    Appelez le code avec une valeur fixe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT GET_NEXT_DAY(TO_CHAR(sysdate-3,'YYYYMMDD')) as tst_fcn
      FROM DUAL;
    Vos colonnes TCAL.DT_PARAM et TPARAM.DT_PARM sont-elles bien typées en date ?

  3. #3
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut
    ok merci Waldar donc la varible de sortie=
    NDAY : 20130105
    et les deux colonnes sont bien à date en base de donnée
    je mets le bout de code complet
    1/ appel de la fonction GET_NEXT_DAY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT GET_NEXT_DAY(TO_CHAR(DT_PARM,'YYYYMMDD')) INTO TOTO FROM TPARAM WHERE CD_PARM='FFVV';
    2/tombe en erreur ici:
    l'erreur est sut cette ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line('New date=(fmt)'||TO_DATE(TOTO,'DD/MM/YYYY'));
    à consulter avant de poster ... la FAQ de C#

  4. #4
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous aimez les conversions (inutiles) !

    On verra ça après.
    Pour comprendre l'erreur collez des dbms_output sur tous vos varchar2 :
    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
    CREATE OR REPLACE FUNCTION GET_NEXT_DAY(CURDAY VARCHAR2) 
    RETURN VARCHAR2 IS 
        NDAY VARCHAR2(10);
    BEGIN
        dbms_output.enable;
        dbms_output.put_line('CURDAY : ' || CURDAY);
     
        SELECT TO_CHAR(MIN(DT_PARAM),'YYYYMMDD')
          INTO NDAY
          FROM TCAL
         WHERE IND_VV = 'sw'
           AND DT_PARAM > TO_DATE(CURDAY,'YYYYMMDD');
     
        dbms_output.put_line('NDAY : ' || NDAY);
    RETURN NDAY;
     
    END;
    /
    Appelez le code avec une valeur fixe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT GET_NEXT_DAY(TO_CHAR(sysdate-3,'YYYYMMDD')) as tst_fcn
      FROM DUAL;
    Vos colonnes TCAL.DT_PARAM et TPARAM.DT_PARM sont-elles bien typées en date ?
    c'est résolu Waldar c'est dû il fallait remplacer

    dbms_output.put_line('New date=(fmt)'||TO_DATE(TOTO,'DD/MM/YYYY'));
    par
    dbms_output.put_line('New date=(fmt)'||TO_DATE(TOTO,'YYYYMMDD'));
    je ne vous ai même pas donné le bon bout de code merci pour votre effort
    à consulter avant de poster ... la FAQ de C#

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ce n'est pas grave l'important est que votre problème soit résolu.
    TO_CHAR au lieu de TO_DATE non ?
    Dans dbms_output on n'envoie que des chaînes de caractères.

    Maintenant on peut améliorer votre fonction en arrêtant toutes les conversions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION GET_NEXT_DAY(CURDAY DATE) 
    RETURN DATE IS
        NDAY date;
    BEGIN
        select trunc(min(dt_param)) into NDAY
          from t_cal
         where ind_vv = 'sw'
           and dt_param > trunc(CURDAY);
     
        return NDAY;
    END;
    /
    Que vous appelez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare
        toto date;
    begin
        SELECT GET_NEXT_DAY(DT_PARM)
          INTO TOTO
          FROM TPARAM
         WHERE CD_PARM = 'FFVV';
     
        dbms_output.put_line('New date=(fmt)'||TO_CHAR(TOTO,'YYYYMMDD'));
    end;

  6. #6
    Membre régulier
    Avatar de unix27
    Inscrit en
    Septembre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 338
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ce n'est pas grave l'important est que votre problème soit résolu.
    TO_CHAR au lieu de TO_DATE non ?
    Dans dbms_output on n'envoie que des chaînes de caractères.

    Maintenant on peut améliorer votre fonction en arrêtant toutes les conversions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE FUNCTION GET_NEXT_DAY(CURDAY DATE) 
    RETURN DATE IS
        NDAY date;
    BEGIN
        select trunc(min(dt_param)) into NDAY
          from t_cal
         where ind_vv = 'sw'
           and dt_param > trunc(CURDAY);
     
        return NDAY;
    END;
    /
    Que vous appelez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare
        toto date;
    begin
        SELECT GET_NEXT_DAY(DT_PARM)
          INTO TOTO
          FROM TPARAM
         WHERE CD_PARM = 'FFVV';
     
        dbms_output.put_line('New date=(fmt)'||TO_CHAR(TOTO,'YYYYMMDD'));
    end;
    évidemment TO_CHAR...
    à consulter avant de poster ... la FAQ de C#

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

Discussions similaires

  1. ORA-01861: literal does not match format string
    Par Bat91 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 31/08/2010, 11h30
  2. ORA-01861: literal does not match format string
    Par labolabs dans le forum PL/SQL
    Réponses: 3
    Dernier message: 08/02/2010, 10h31
  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