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 :

erreur ora-01839 sur une requête.


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut erreur ora-01839 sur une requête.
    Bonjour à tous, je suis en train de me taper la tête sur mon bureau en raison d'une erreur retournée, par une la requête suivante:

    Code sql : 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
     
    SELECT distinct enf.idf_agent                                MATRICULE,
           his.nom_usuel || ' ' || his.nom_prenom       NOM_PRENOM_PARENT,
           enf.nom_patro || ' ' || enf.nom_prenom       NOM_PRENOM_ENFANT,
           to_char(enf.dat_naissance,'DD/MM/YYYY')      DATE_NAISSANCE,
           to_char(enf.dat_justif ,'DD/MM/YYYY')        DATE_JUSTIF,
           enf.ind_droitsft                             DROITSFT
    FROM   rh.enfant enf,
           og.ident_his his,
           rh.agtnat_anter nat 
    WHERE  nat.idf_agent = enf.idf_agent
    AND    nat.ident_id  = his.ident_id
    and    nat.idf_agent = (select distinct idf_agent from rh.agtpai_anter where idf_agent=415)
    --and    nat.idf_agent = 415
    and (  to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') >= to_date('&mois_inf','DD/MM')
           and to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') <= to_date('&mois_sup','DD/MM')
         )
    AND   to_date(to_char(enf.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')   > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_debut,'DD/MM/YYYY'),'DD/MM/YYYY')  <= to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')    > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')

    j'ai l'erreur suivante:

    ERREUR à la ligne 15 :
    ORA-01839: le quantième n'est pas valide pour le mois indiqué
    Mais si je lance la requête suivante, alors c'est bon:

    Code sql : 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
     
    SELECT distinct enf.idf_agent                                MATRICULE,
           his.nom_usuel || ' ' || his.nom_prenom       NOM_PRENOM_PARENT,
           enf.nom_patro || ' ' || enf.nom_prenom       NOM_PRENOM_ENFANT,
           to_char(enf.dat_naissance,'DD/MM/YYYY')      DATE_NAISSANCE,
           to_char(enf.dat_justif ,'DD/MM/YYYY')        DATE_JUSTIF,
           enf.ind_droitsft                             DROITSFT
    FROM   rh.enfant enf,
           og.ident_his his,
           rh.agtnat_anter nat 
    WHERE  nat.idf_agent = enf.idf_agent
    AND    nat.ident_id  = his.ident_id
    --and    nat.idf_agent = (select distinct idf_agent from rh.agtpai_anter where idf_agent=415)
    and    nat.idf_agent = 415
    and (  to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') >= to_date('&mois_inf','DD/MM')
           and to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') <= to_date('&mois_sup','DD/MM')
         )
    AND   to_date(to_char(enf.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')   > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_debut,'DD/MM/YYYY'),'DD/MM/YYYY')  <= to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')    > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')

    Qui aurait une idée

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    2 choses.
    A quoi sert cette sous-requête?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT idf_agent FROM rh.agtpai_anter WHERE idf_agent=415
    Tout ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AND (  to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') >= to_date('&mois_inf','DD/MM')
           AND to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') <= to_date('&mois_sup','DD/MM')
         )
    AND   to_date(to_char(enf.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')   > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_debut,'DD/MM/YYYY'),'DD/MM/YYYY')  <= to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    AND   to_date(to_char(his.dat_fin,'DD/MM/YYYY'),'DD/MM/YYYY')    > to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')
    peut être remplacé par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       AND (    enf.dat_naissance >= TO_DATE ('&mois_inf', 'DD/MM')
            AND enf.dat_naissance <= TO_DATE ('&mois_sup', 'DD/MM')
           )
       AND enf.dat_fin > SYSDATE
       AND his.dat_debut <= SYSDATE
       AND his.dat_fin > SYSDATE
    Le formatage d'une date n'entre pas en compte dans une comparaison puisqu'une date n'a pas de format.

    Quant à votre erreur, elle doit provenir des paramètres &mois_inf et &mois_sup.

  3. #3
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    En fait cette sous requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct idf_agent from rh.agtpai_anter where idf_agent=415

    Si je ne précise pas de idf_agent va me renvoyer une liste de idf_agent précis.
    Dans mon cas cas en principe ça ne renvoie que le chiffre 415.

    Dans le cas de la requête suivante:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    and (  to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') >= to_date('&mois_inf','DD/MM')
           and to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') <= to_date('&mois_sup','DD/MM')
         )

    Celà me sert à filltrer la liste des enfants à afficher. Exemple si mois_inf= '01/01' et mois_sup='31/03' alors si un enfant est née le '02/03/1985', il est censé être pris en compte .

    J'ai vérifié le retour de

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM')

    me donnera '02/03/2009'.
    Ce qui me perturbe est pourquoi en précisant: "nat.idf_agent = 415" la requête ne plante pas alors, qu'en mettant la sous requête évoquée + haut, ça me met cette erreur.

    Mais j'ai parcouru des posts sur différents sites, et oracle semble avoir un bug lié aux conversions de dates.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par pascal_T Voir le message
    En fait cette sous requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct idf_agent from rh.agtpai_anter where idf_agent=415

    Si je ne précise pas de idf_agent va me renvoyer une liste de idf_agent précis.
    Dans mon cas cas en principe ça ne renvoie que le chiffre 415.
    Pourquoi ne pas mettre directement le nombre?
    Si vous voulez vérifier l'existence de ce nombre dans la table, il y a d'autres moyens. Faire un distinct n'est pas optimal.


    Citation Envoyé par pascal_T Voir le message
    Dans le cas de la requête suivante:
    Celà me sert à filltrer la liste des enfants à afficher. Exemple si mois_inf= '01/01' et mois_sup='31/03' alors si un enfant est née le '02/03/1985', il est censé être pris en compte .
    Vos paramètres sont des jours et non des mois. Il serait plus simple de passer directement un mois.

  5. #5
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Citation Envoyé par GoLDoZ Voir le message
    Pourquoi ne pas mettre directement le nombre?
    Si vous voulez vérifier l'existence de ce nombre dans la table, il y a d'autres moyens. Faire un distinct n'est pas optimal.



    Vos paramètres sont des jours et non des mois. Il serait plus simple de passer directement un mois.
    Pour la sous requête, mon but est bien de ne pas mettre de where afin de tout récupérer, mais pour l"instant je me restreint à une valeur particulière.

    Par pour ma date, je vais essyer en la faisant saisir en entier en rajoutant l'année.

  6. #6
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Ca y est j'ai trouvé!

    EN fait dans ma table enfant, j'ai 2 dates de naissance qui valent le
    "29/02/2000". Mais du coup quand je tente de générer ma date avec ma chaine '29/02/2009' ==> pas bon!

    Enfin ça m'a bien pris la tête quand même, mais j'ai compris.

    Bon Weeek-end!

  7. #7
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    En fait cette sous requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct idf_agent from rh.agtpai_anter where idf_agent=415

    Si je ne précise pas de idf_agent va me renvoyer une liste de idf_agent précis.
    Dans mon cas cas en principe ça ne renvoie que le chiffre 415.

    Dans le cas de la requête suivante:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    and (  to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') >= to_date('&mois_inf','DD/MM')
           and to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM') <= to_date('&mois_sup','DD/MM')
         )

    Celà me sert à filltrer la liste des enfants à afficher. Exemple si mois_inf= '01/01' et mois_sup='31/03' alors si un enfant est née le '02/03/1985', il est censé être pris en compte .

    J'ai vérifié le retour de

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_date(to_char(enf.dat_naissance,'DD/MM'),'DD/MM')

    me donnera '02/03/2009'.
    Ce qui me perturbe est pourquoi en précisant: "nat.idf_agent = 415" la requête ne plante pas alors, qu'en mettant la sous requête évoquée + haut, ça me met cette erreur.

    Mais j'ai parcouru des posts sur différents sites, et oracle semble avoir un bug lié aux conversions de dates.

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

Discussions similaires

  1. [MySQL] erreur de syntaxe sur une requête très simple
    Par Anandamine dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 01/06/2012, 09h45
  2. [MySQL] Erreur de syntaxe sur une requête
    Par nO_life dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/03/2009, 12h34
  3. Erreur de syntaxe sur une requête d'insertion
    Par Moustic74 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2008, 17h34
  4. Erreur de syntaxe sur une requête paramétrée
    Par deglingo37 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2006, 22h21
  5. Réponses: 6
    Dernier message: 29/11/2005, 19h36

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