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

SQL Oracle Discussion :

TO_DATE fonctionne dans un SELECT mais provoque une erreur ORA-01861 (littéral non concordant) dans un WHERE !


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut TO_DATE fonctionne dans un SELECT mais provoque une erreur ORA-01861 (littéral non concordant) dans un WHERE !
    Bonjour,

    Je rencontre un souci avec les dates dans Oracle (je sais, c'est pas original).
    J'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM      workcase w
             INNER JOIN
                case_variable CV
             ON CV.tcid = w.id AND CV.variable = 'ddi_sap_date_demande'
     WHERE   w.id = 306634
    Qui me renvoie le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VALUE = 2011/03/16  00:00:00
    DATE_DEMANDE = 16/03/2011
    Manifestement, la requête fonctionne donc (la colonne value est de type varchar2(2000) pour info).
    Par contre, si je rajoute une clause where comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM      workcase w
             INNER JOIN
                case_variable CV
             ON CV.tcid = w.id AND CV.variable = 'ddi_sap_date_demande'
     WHERE   w.id = 306634
             AND TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') = SYSDATE
    J'obtiens une erreur ORA-01861 !
    Comment se fait-il qu'une telle erreur se produise dans le where, alors même que dans le select la conversion to_date fonctionne ?! Je veux dire, à partir du moment où la conversion du varchar2 en date fonctionne, pourquoi sa comparaison avec sysdate échoue ?
    Merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Citation Envoyé par lasyan3 Voir le message
    Manifestement, la requête fonctionne donc (la colonne value est de type varchar2(2000) pour info).
    to_date formate une chaine en date (d'où son nom) et non l'inverse !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lasyan3 Voir le message
    to_date formate une chaine en date (d'où son nom) et non l'inverse !
    Effectivement, j'ai écris une très belle c*nn*ri*...
    Je vais reprendre un café et fermé ma bouche....

  4. #4
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    laurentschneider > la requête renvoie le résultat suivant :
    mnitu > non, par contre il y a un index sur la colonne variable.

    Merci.

  5. #5
    Expert confirmé 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
    Par défaut
    Votre requête corresponde en fait à la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM  case_variable CV
     WHERE   CV.tcid = 306634
       AND CV.variable = 'ddi_sap_date_demande'
       AND TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') = SYSDATE
    Il doit y avoir une valeur non-date dans la colonne CV.VALUE parmi les enregistrements qui ont CV.variable = 'ddi_sap_date_demande'

    [Edit]
    La requête suivante devrait se planter avec la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM  case_variable CV
     WHERE  CV.variable = 'ddi_sap_date_demande'
    [/EDIT]

  6. #6
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Citation Envoyé par mnitu Voir le message
    La requête suivante devrait se planter avec la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM  case_variable CV
     WHERE  CV.variable = 'ddi_sap_date_demande'
    [/EDIT]
    Justement, non, elle fonctionne ! C'est ce que je disais au début, le select fonctionne sans problème, mais le where plante ! C'est ça qui est énorme !

    Citation Envoyé par mnitu Voir le message
    Il doit y avoir une valeur non-date dans la colonne CV.VALUE parmi les enregistrements qui ont CV.variable = 'ddi_sap_date_demande'
    A part des valeurs à null, toutes les valeurs sont du bon format, j'ai vérifié.

    Citation Envoyé par mnitu Voir le message
    Votre requête corresponde en fait à la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM  case_variable CV
     WHERE   CV.tcid = 306634
       AND CV.variable = 'ddi_sap_date_demande'
       AND TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') = SYSDATE
    Alors là c'est fort : cette requête fonctionne ! Ce serait lié à la jointure ?! WTF !!!

  7. #7
    Expert confirmé 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
    Par défaut
    Et cette requête ça fonctionne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT   CV.VALUE,
             TO_DATE (CV.VALUE, 'YYYY/MM/DD  HH24:MI:SS') AS date_demande
      FROM  case_variable CV
     WHERE  CV.tcid = 306634

  8. #8
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Non, mais c'est normal car la table CASE_VARIABLE contient des valeurs de variables, donc elle possède au moins 2 colonnes : "variable" qui contient le nom de la variable, et "value" qui contient sa valeur.
    Dans mes requetes, je me limite à la variable "ddi_sap_date_demande" car c'est elle que je veux récupérer dans la table.
    Sans cette condition, je vais récupérer toutes les variables de la table, dont celles qui ne sont pas des dates (d'où l'erreur).

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/02/2013, 18h49
  2. Caractère provoquant une erreur dans une requête
    Par defluc dans le forum Firebird
    Réponses: 4
    Dernier message: 04/02/2008, 12h14
  3. Réponses: 6
    Dernier message: 29/05/2006, 11h21
  4. msaccess a provoqué une erreur dans KERNEL32.dll
    Par massol joel dans le forum Access
    Réponses: 12
    Dernier message: 03/04/2006, 14h32
  5. Select Case provoque une erreur
    Par defluc dans le forum SQL
    Réponses: 6
    Dernier message: 14/08/2005, 23h59

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