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 :

ORA-01407: erreur oracle incompréhensible


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut ORA-01407: erreur oracle incompréhensible
    Bonjour,

    cela fait 2 jours que je rencontre l'erreur suivante lors d'une requête SQL et je n'arrive pas à m'en dépatouiller Error: ORA-01407: cannot update str %s ("valeur1") to NULL.
    J'ai testé chacune des sous-requêtes, j'ai aucune valeur NULL remontée. :/ La requête fonctionne dans certains cas : je n'ai pas mis la clause where, car j'ai reproduit le problème en exécutant juste cette requête.

    Si quelqu'un a une piste, celà serait super.
    En vous remerciant par avance

    ci - joint la requête
    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
     
        UPDATE TABLE_ONE t1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
        SET (t1.valeur1, t1.valeur2, t1.valeur3, t1.valeur4, t1.valeur5, t1.valeur6) =                                                                                                                                                                      
            (select substr(STRING_CHARACTERS, 1, 6) as niv1,                                                                                                                                                                                                                                                                                                      
                    substr(STRING_CHARACTERS, 7, 6) as niv2,                                                                                                                                                                                                                                                                                                      
                    substr(STRING_CHARACTERS, 13, 6) as niv3,                                                                                                                                                                                                                                                                                                     
                    substr(STRING_CHARACTERS, 19, 6) as niv4,                                                                                                                                                                                                                                                                                                     
                    substr(STRING_CHARACTERS, 25, 6) as niv5,                                                                                                                                                                                                                                                                                                     
                    substr(STRING_CHARACTERS, 31, 6) as niv6                                                                                                                                                                                                                                                                                                      
             from (select TABLE_2.*, nvl( case                                                                                                                                                                                                                                                                                                                                     
                               when TABLE_2.ser_in_agerer = 'O' then  TABLE_2.valeur_niv1 || TABLE_2.valeur_niv2 || TABLE_2.valeur_niv3 || TABLE_2.valeur_niv4 || TABLE_2.valeur_niv5 || TABLE_2.valeur_niv6                                                                                                                                                                      
                               when jointure1.ser_in_agerer = 'O' then  jointure1.valeur_niv1||jointure1.valeur_niv2||jointure1.valeur_niv3||jointure1.valeur_niv4||jointure1.valeur_niv5||jointure1.valeur_niv6                                                                                                                                  
                               when jointure2.ser_in_agerer = 'O' then  jointure2.valeur_niv1||jointure2.valeur_niv2||jointure2.valeur_niv3||jointure2.valeur_niv4||jointure2.valeur_niv5||jointure2.valeur_niv6                                                                                                                                   
                               when jointure3.ser_in_agerer = 'O' then  jointure3.valeur_niv1||jointure3.valeur_niv2||jointure3.valeur_niv3||jointure3.valeur_niv4||jointure3.valeur_niv5||jointure3.valeur_niv6                                                                                                                                   
                               when jointure4.ser_in_agerer = 'O' then  jointure4.valeur_niv1||jointure4.valeur_niv2||jointure4.valeur_niv3||jointure4.valeur_niv4||jointure4.valeur_niv5||jointure4.valeur_niv6                                                                                                                                   
                               when jointure5.ser_in_agerer = 'O' then  jointure5.valeur_niv1||jointure5.valeur_niv2||jointure5.valeur_niv3||jointure5.valeur_niv4||jointure5.valeur_niv5||jointure5.valeur_niv6                                                                                                                                   
                               end , '                                    ') as STRING_CHARACTERS                                                                                                                                                                                                                                                                         
                   from TABLE_2  TABLE_2                                                                                                                                                                                                                                                                                                                                
                   left outer join TABLE_2 jointure1 on jointure1.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure1.valeur_niv6 = '      ' and  jointure1.valeur_niv5 = TABLE_2.valeur_niv5 and jointure1.valeur_niv4 = TABLE_2.valeur_niv4 and jointure1.valeur_niv3 = TABLE_2.valeur_niv3 and jointure1.valeur_niv2 = TABLE_2.valeur_niv2 and jointure1.valeur_niv1 = TABLE_2.valeur_niv1          
                   left outer join TABLE_2 jointure2 on jointure2.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure2.valeur_niv6 = '      ' and  jointure2.valeur_niv5 = '      ' and jointure2.valeur_niv4 = TABLE_2.valeur_niv4 and jointure2.valeur_niv3 = TABLE_2.valeur_niv3 and jointure2.valeur_niv2 = TABLE_2.valeur_niv2 and jointure2.valeur_niv1 = TABLE_2.valeur_niv1                     
                   left outer join TABLE_2 jointure3 on jointure3.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure3.valeur_niv6 = '      ' and  jointure3.valeur_niv5 = '      ' and jointure3.valeur_niv4 = '      ' and jointure3.valeur_niv3 = TABLE_2.valeur_niv3 and jointure3.valeur_niv2 = TABLE_2.valeur_niv2 and jointure3.valeur_niv1 = TABLE_2.valeur_niv1                                
                   left outer join TABLE_2 jointure4 on jointure4.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure4.valeur_niv6 = '      ' and  jointure4.valeur_niv5 = '      ' and jointure4.valeur_niv4 = '      ' and jointure4.valeur_niv3 = '      ' and jointure4.valeur_niv2 = TABLE_2.valeur_niv2 and jointure4.valeur_niv1 = TABLE_2.valeur_niv1                                           
                   left outer join TABLE_2 jointure5 on jointure5.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure5.valeur_niv6 = '      ' and  jointure5.valeur_niv5 = '      ' and jointure5.valeur_niv4 = '      ' and jointure5.valeur_niv3 = '      ' and jointure5.valeur_niv2 = '      ' and jointure5.valeur_niv1 = TABLE_2.valeur_niv1                                                                                                                                                                                                                                                                                                                                      
            where TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY'))                                                                                                                                                                                                                                                                                                                                                     
             where valeur_niv1 = t1.valeurbis1                                                                                                                                                                                                                                                                                                                
               and valeur_niv2 = t1.valeurbis2                                                                                                                                                                                                                                                                                                                
               and valeur_niv3 = t1.valeurbis3                                                                                                                                                                                                                                                                                                                
               and valeur_niv4 = t1.valeurbis4                                                                                                                                                                                                                                                                                                                
               and valeur_niv5 = t1.valeurbis5                                                                                                                                                                                                                                                                                                                
               and valeur_niv6 = t1.valeurbis6                                                                                                                                                                                                                                                                                                                
            )                                                                                                                                                                                                                                                                                                                                                           
        WHERE          { some conditions }

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 448
    Par défaut
    Bonjour,
    Il faudrait penser aux balises, car la requête est ici difficile à lire...
    Sinon une première piste: qu'est-ce qu'il se passe ici si la sous-requête ne renvoie rien pour une ligne de table_one ?
    Autre piste, je vois ceci dans les jointures:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...  and TABLE_2.date_fin_validite = to_date('31/12/9999','DD/MM/YYYY')...
    Or dans le WHERE nous avons ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY')
    Ce n'est pas la même année, donc pour moi aucune des jointures ne peux vérifier la condition.

    Tatayo.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut
    Bonjour, autant
    pour moi, j'ai oublié de remplacer la date mais ce sont les 2 mêmes dates en réalité.

    J'ai testé la sous requête suivante et elle renvoie bien des résultats et 0 Null à l'horizon:
    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
    select TABLE_2.*, nvl( case                                                                                                                                                                                                                                                                                                                                     
                               when TABLE_2.ser_in_agerer = 'O' then  TABLE_2.valeur_niv1 || TABLE_2.valeur_niv2 || TABLE_2.valeur_niv3 || TABLE_2.valeur_niv4 || TABLE_2.valeur_niv5 || TABLE_2.valeur_niv6                                                                                                                                                                      
                               when jointure1.ser_in_agerer = 'O' then  jointure1.valeur_niv1||jointure1.valeur_niv2||jointure1.valeur_niv3||jointure1.valeur_niv4||jointure1.valeur_niv5||jointure1.valeur_niv6                                                                                                                                  
                               when jointure2.ser_in_agerer = 'O' then  jointure2.valeur_niv1||jointure2.valeur_niv2||jointure2.valeur_niv3||jointure2.valeur_niv4||jointure2.valeur_niv5||jointure2.valeur_niv6                                                                                                                                   
                               when jointure3.ser_in_agerer = 'O' then  jointure3.valeur_niv1||jointure3.valeur_niv2||jointure3.valeur_niv3||jointure3.valeur_niv4||jointure3.valeur_niv5||jointure3.valeur_niv6                                                                                                                                   
                               when jointure4.ser_in_agerer = 'O' then  jointure4.valeur_niv1||jointure4.valeur_niv2||jointure4.valeur_niv3||jointure4.valeur_niv4||jointure4.valeur_niv5||jointure4.valeur_niv6                                                                                                                                   
                               when jointure5.ser_in_agerer = 'O' then  jointure5.valeur_niv1||jointure5.valeur_niv2||jointure5.valeur_niv3||jointure5.valeur_niv4||jointure5.valeur_niv5||jointure5.valeur_niv6                                                                                                                                   
                               end , '                                    ') as STRING_CHARACTERS                                                                                                                                                                                                                                                                         
                   from TABLE_2  TABLE_2                                                                                                                                                                                                                                                                                                                                
                   left outer join TABLE_2 jointure1 on jointure1.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure1.valeur_niv6 = '      ' and  jointure1.valeur_niv5 = TABLE_2.valeur_niv5 and jointure1.valeur_niv4 = TABLE_2.valeur_niv4 and jointure1.valeur_niv3 = TABLE_2.valeur_niv3 and jointure1.valeur_niv2 = TABLE_2.valeur_niv2 and jointure1.valeur_niv1 = TABLE_2.valeur_niv1          
                   left outer join TABLE_2 jointure2 on jointure2.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure2.valeur_niv6 = '      ' and  jointure2.valeur_niv5 = '      ' and jointure2.valeur_niv4 = TABLE_2.valeur_niv4 and jointure2.valeur_niv3 = TABLE_2.valeur_niv3 and jointure2.valeur_niv2 = TABLE_2.valeur_niv2 and jointure2.valeur_niv1 = TABLE_2.valeur_niv1                     
                   left outer join TABLE_2 jointure3 on jointure3.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure3.valeur_niv6 = '      ' and  jointure3.valeur_niv5 = '      ' and jointure3.valeur_niv4 = '      ' and jointure3.valeur_niv3 = TABLE_2.valeur_niv3 and jointure3.valeur_niv2 = TABLE_2.valeur_niv2 and jointure3.valeur_niv1 = TABLE_2.valeur_niv1                                
                   left outer join TABLE_2 jointure4 on jointure4.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure4.valeur_niv6 = '      ' and  jointure4.valeur_niv5 = '      ' and jointure4.valeur_niv4 = '      ' and jointure4.valeur_niv3 = '      ' and jointure4.valeur_niv2 = TABLE_2.valeur_niv2 and jointure4.valeur_niv1 = TABLE_2.valeur_niv1                                           
                   left outer join TABLE_2 jointure5 on jointure5.date_fin_validite = TABLE_2.date_fin_validite and TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY') and jointure5.valeur_niv6 = '      ' and  jointure5.valeur_niv5 = '      ' and jointure5.valeur_niv4 = '      ' and jointure5.valeur_niv3 = '      ' and jointure5.valeur_niv2 = '      ' and jointure5.valeur_niv1 = TABLE_2.valeur_niv1                                                                                                                                                                                                                                                                                                                                      
            where TABLE_2.date_fin_validite = to_date('31/12/2001','DD/MM/YYYY')

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 448
    Par défaut
    Il reste toujours la première question: que se passe t'il si pour une ligne de table_one, la requête ne renvoie rien ?
    Est-ce que la colonne STRING_CHARACTERS fait toujours au moins 37 caractères ?

    Tatayo.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut
    Bonjour Tatayo,
    merci de prendre le temps de répondre à ma question.

    Toutes les valeurs niv{x} font 6 caractères ou vide avec des espaces de 6 caractères (c'est vérifié en éxécutant la sous-requête). Dans le case, on met 36 caractères à blanc si on ne trouve rien, donc théoriquement les substr sont bien remplis et découpés.

    Cette requête me rends fou.. Mais peut être, je n'ai pas compris votre question.

    Merci pour votre retour.

  6. #6
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Bonjour,
    Il n'y a pas de valeur NULL dans les valeur_nivX de TABLE_2 ?
    et qui me/nous dit qu'il y a toujours quelque chose à "updater" ?

Discussions similaires

  1. ORA-01407: erreur oracle incompréhensible
    Par artif27 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/02/2017, 21h42
  2. Erreur oracle incompréhensible. . .
    Par SQLpro dans le forum Débuter
    Réponses: 3
    Dernier message: 23/03/2011, 17h25
  3. [ORA-01652] Erreur Oracle
    Par ttamttam dans le forum Débuter
    Réponses: 21
    Dernier message: 16/08/2010, 19h43
  4. Erreur Oracle ORA-00959
    Par Longrais dans le forum Oracle
    Réponses: 1
    Dernier message: 03/10/2006, 10h49
  5. Erreur Oracle ORA-30036
    Par lapartdombre dans le forum Oracle
    Réponses: 5
    Dernier message: 04/11/2005, 15h37

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