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 :

Not a valid month ? ?


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut Not a valid month ? ?
    Bonjour,


    lors de l'exécution de ma requete, il me sort un "not a valid month" or, cela me semble peu probable
    Voici la requete en question, avec en gras le code posant problème :

    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
    SELECT SUBSTR(TO_CHAR(ROUND(SUM (sph_mnt_1740+sph_mnt_1760+sph_mnt_1741+sph_mnt_1761))),0,5), ROUND(SUM(sph_mnt_1743) ), sco_dt_start_slice
    FROM m4sco_ac_hr_perio6 A
    WHERE
    id_organization='80' AND
    sco_id_hr='121803'
    AND sco_or_hr_period=1
    AND sco_pay_freq_pay='004'
    AND sco_pay_freq_alloc='004'
    AND id_currency='EUR'
    AND
    	(
    		(sco_dt_pay<='31/01/2005'
    		AND sco_dt_pay>='01/01/2005'
    		AND sco_dt_start_slice >='01/01/2005'
    		)
    		OR
      		(
    sco_dt_start_slice =
    (SELECT max(sco_dt_start_slice)
    FROM M4sco_ac_hr_period
    WHERE id_organization='80' AND
    sco_id_hr='121803'
    AND sco_dt_pay<='01/01/2005'
    AND sco_or_hr_period=1
    AND sco_pay_freq_pay='004'
    AND sco_pay_freq_alloc='004'
    AND id_currency='EUR'
    AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    AND sco_dt_end_slice=TO_DATE('31/12/'||to_char(2005-1),'DD/MM/YYYY')
    )
    )

    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    GROUP BY sco_dt_start_slice
    ORDER BY sco_dt_start_slice;
    Pourtant, la sous requete fonctionne sans problème si elle est séparée du corps...

    Une idée ?
    (l'erreur est aussi présente si on n'a que "select max (sco_dt_start_slice) from m4sco_ac_hr_period, sans clause where)

    Merci de votre aide[/quote]

  2. #2
    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
    Essaye de mettre le format dans tous tes tests de date
    ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sco_dt_pay<='31/01/2005'
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Es-tu sûr que cela ne vient pas plutôt de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sco_dt_pay<='31/01/2005' 
          AND sco_dt_pay>='01/01/2005' 
          AND sco_dt_start_slice >='01/01/2005'
    Car il est vivement déconseillé d'utiliser la conversion implicite...
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    oui, oui, j'en suis sur (en fait, dans la procedure, ce sont des variables date qui sont renseignées)

  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
    La requete toute seule sous TOAD ou SqlPlus donne aussi l'erreur ?

    Après une migration, la base avait des données date incohérentes qui faisait planter ce genre de requetes :
    Vérifie aussi qu'il n'y a pas de date de type '00-00-0000 00:00:00'
    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
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    la sous requete seule, à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT max(sco_dt_start_slice)
     							FROM M4sco_ac_hr_period
     							WHERE id_organization='80' AND
     							sco_id_hr='121803'
    							AND sco_dt_pay<='01/01/2005'
    							AND sco_or_hr_period=1
    							AND sco_pay_freq_pay='004'
    							AND sco_pay_freq_alloc='004'
    							AND id_currency='EUR'
    							AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    							AND sco_dt_end_slice=TO_DATE('31/12/'||to_char(2005-1),'DD/MM/YYYY')
    me renvoie correctement le 01/12/2004

  7. #7
    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 la requete complète ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    ah oui, excuse moi ; j'ai aussi l'erreur dans ce cas :'(

    je suis allé voir des collègues (qui ont aussi fait les tests) et qui sont bouche béée devant le problème

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par szdavid
    je suis allé voir des collègues (qui ont aussi fait les tests) et qui sont bouche béée devant le problème
    moi c'est devant le code que je suis bouche bée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTR(TO_CHAR(ROUND(SUM
    et toutes ces comparaisons entres des chaines de charactères et des dates... ça ne me dit rien qui vaille

  10. #10
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    euh, oui, le substr(((((((((())))))))), je te le concède ;-)

    Pour les comparaisons entre chaine de caractères, ce la a été réalisé principalement pour les tests ; dans la procédure PL/SQL, il n'y a que des variables date

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    y a-t-il une chance que tu nous donnes une requête qui plante?

  12. #12
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    voici la requete telle qu'elle est en PL/SQL
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    SELECT SUBSTR(TO_CHAR(ROUND(SUM (sph_mnt_1740+sph_mnt_1760+sph_mnt_1741+sph_mnt_1761))),0,5), ROUND(SUM(sph_mnt_1743) ), sco_dt_start_slice
    FROM m4sco_ac_hr_perio6 A
    WHERE
    id_organization=organization AND
    sco_id_hr=id_hr
    AND sco_or_hr_period=1
    AND sco_pay_freq_pay='004'
    AND sco_pay_freq_alloc='004'
    AND id_currency='EUR'
    AND
    	(
    		(sco_dt_pay<=fin_dadsu
    		AND sco_dt_pay>=debut_dadsu
    		AND sco_dt_start_slice >=debut_dadsu
    		)
    		OR
    		(
    		 sco_dt_start_slice =
    		 					(SELECT max(sco_dt_start_slice)
    							FROM M4sco_ac_hr_period
    							WHERE id_organization=organization AND
    							sco_id_hr=id_hr
    							AND sco_dt_pay<=debut_dadsu
    							AND sco_or_hr_period=1
    							AND sco_pay_freq_pay='004'
    							AND sco_pay_freq_alloc='004'
    							AND id_currency='EUR'
    							AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    							AND sco_dt_end_slice=TO_DATE('31/12/'||to_char(dt_aa_exe-1),'DD/MM/YYYY')
    							)
    		)
    	)
    AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    GROUP BY sco_dt_start_slice
    ORDER BY sco_dt_start_slice;

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND sco_dt_end_slice=TO_DATE('31/12/'||to_char(dt_aa_exe-1),'DD/MM/YYYY')
    Ici il y a un To_Char() sans format
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  14. #14
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    et une requête qui plante en sql, c'est possible?

    pourrais-tu aussi supprimer toutes les lignes qui fonctionnent en PL/SQL jusqu'à ce que ça ne marche plus?

  15. #15
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par SheikYerbouti
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND sco_dt_end_slice=TO_DATE('31/12/'||to_char(dt_aa_exe-1),'DD/MM/YYYY')
    Ici il y a un To_Char() sans format
    bon to_char(2000-1) ce n'est pas si grave...

  16. #16
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par szdavid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    d'un point de vue esthétique, je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc(sco_dt_start_slice,'MM')+25

  17. #17
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    c'est à n'y rien comprendre !

    En remplaçant
    AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND to_char(sco_dt_alloc,'DDMMYYYY')='26'||TO_CHAR(sco_dt_start_slice,'MMYYYY')

    ça marche...

    Euh... là, je suis comme un con...
    Surtout que la procédure avait été utilisée plus de 15 000 fois (avec chaque fois des situations différentes) avant de planter

    Merci beaucoup pour votre aide à tous

    Si quelqu'un comprend le pourquoi du comment, je serai quand même interssé :-)

  18. #18
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par szdavid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM m4sco_ac_hr_perio6 A
    WHERE sco_dt_start_slice =
    	(SELECT max(sco_dt_start_slice)
    	FROM M4sco_ac_hr_period
    les champs m4sco_ac_hr_perio6.sco_dt_start_slice et M4sco_ac_hr_period.sco_dt_start_slice ont-ils le même type (date)?

  19. #19
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    oui lol

    Incompréhensible :'(

  20. #20
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par szdavid
    c'est à n'y rien comprendre !

    En remplaçant
    AND sco_dt_alloc=TO_DATE('26'||TO_CHAR(sco_dt_start_slice,'MMYYYY'),'DDMMYYYY')
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND to_char(sco_dt_alloc,'DDMMYYYY')='26'||TO_CHAR(sco_dt_start_slice,'MMYYYY')

    ça marche...
    peux-tu catcher l'exception pour savoir quelle date ça plante...


    idée saugrenue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> select * from dual where to_char(date '0000-01-01','DDMMYYYY')='26'||TO_CHAR(date '0000-01-01','MMYYYY');
     
    no rows selected
     
    SQL> select * from dual where date '0000-01-01'=to_date('26'||TO_CHAR(date '0000-01-01','MMYYYY'),'DDMMYYYY');
    select * from dual where date '0000-01-01'=to_date('26'||TO_CHAR(date '0000-01-01','MMYYYY'),'DDMMYYYY')
                                                            *
    ERROR at line 1:
    ORA-01843: not a valid month
    l'an 0 n'existe pas (vraiment)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ORA-01843: not a valid month
    Par jplec dans le forum PL/SQL
    Réponses: 13
    Dernier message: 23/06/2017, 13h19
  2. [Débutant] ORA-01843 NOT A VALID MONTH avec mon insert
    Par jacko842 dans le forum ADO.NET
    Réponses: 7
    Dernier message: 20/10/2012, 10h45
  3. OracleException not a valid month
    Par khadime27 dans le forum C#
    Réponses: 7
    Dernier message: 18/09/2012, 16h58
  4. Erreur Oracle not a valid month
    Par SQL_i dans le forum Oracle
    Réponses: 4
    Dernier message: 14/10/2011, 14h25
  5. Réponses: 6
    Dernier message: 10/06/2011, 13h57

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