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-01410 ROW_ID non valid


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 4
    Points
    4
    Par défaut ORA-01410 ROW_ID non valid
    Bonjour à tous. Voilà, j'ai une erreur ORA-01410 ROW_ID non valid lors de l'exécution d'un insert. L'erreur n'est pas systématique, elle se produit relativement rarement. Voilà la requête qui génère l'erreur:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    INSERT INTO ASS_ORGANE_FAMILLE (
    SELECT DISTINCT nro_suivi, idt_famille, NULL, NULL, 3, pcontexte -- determine entre la tabke des elements valide et celle des ¿alider si le nombre est le m¿ pour le m¿ VI et le m¿ bloc
               FROM (SELECT   nro_suivi, idt_bloc, COUNT (idt_critere) AS nbvalvalid -- liste les blocs valides pour un VI et pour ses selections
                         FROM ((SELECT DISTINCT &pelement AS nro_suivi, c.idt_bloc, c.idt_critere -- evaluation des critres autre que macro pour des valeurs '!='
                                           FROM famille f,
                                                bloc b,
                                                critere c,
                                                ass_organe_famille aof
                                          WHERE f.contexte = pcontexte
                                            AND aof.num_suivi = &pelement
                                            AND aof.niveau = 2
                                            AND f.idt_pere = aof.idt_famille
                                            AND c.type_crit <> 'MACRO'
                                            AND f.idt_famille = b.idt_famille
                                            AND b.idt_bloc = c.idt_bloc
                                            AND c.operateur = '!='
                                MINUS SELECT DISTINCT aif.nro_suivi, c.idt_bloc, c.idt_critere
                   -- evaluation des critres autre que macro pour des valeurs '!='
                                           FROM famille f,
                                                bloc b,
                                                critere c,
                                                ai_ne.ai_fab aif,
                                                ass_organe_famille aof
                                          WHERE f.contexte = pcontexte
                                            AND aof.num_suivi = &pelement
                                            AND aof.niveau = 2
                                            AND f.idt_pere = aof.idt_famille
                                            AND c.type_crit <> 'MACRO'
                                            AND f.idt_famille = b.idt_famille
                                            AND b.idt_bloc = c.idt_bloc
                                            AND c.operateur = '!='
                                            AND aif.contexte = pcontexte
                                            AND aif.nro_suivi = &pelement
                                            AND aif.type_info = c.type_crit
                                            AND aif.valeur_info LIKE c.valeur)
                               UNION SELECT DISTINCT aif.nro_suivi, c.idt_bloc,
                                               c.idt_critere
                    -- evaluation des critres autre que macro pour des valeurs '='
                                          FROM famille f,
                                               bloc b,
                                               critere c,
                                               ai_ne.ai_fab aif,
                                               ass_organe_famille aof
                                         WHERE f.contexte = pcontexte
                                           AND aof.num_suivi = &pelement
                                           AND aof.niveau = 2
                                           AND f.idt_pere = aof.idt_famille
                                           AND c.type_crit <> 'MACRO'
                                           AND f.idt_famille = b.idt_famille
                                           AND b.idt_bloc = c.idt_bloc
                                           AND c.operateur = '='
                                           AND aif.contexte = pcontexte
                                           AND aif.nro_suivi = &pelement
                                           AND aif.type_info = c.type_crit
                                           AND aif.valeur_info LIKE c.valeur
                               UNION SELECT DISTINCT aif.nro_suivi, c.idt_bloc,
                                               c.idt_critere
             -- evaluation des critres autre que macro pour des valeurs intervales
                                          FROM famille f,
                                               bloc b,
                                               critere c,
                                               ai_ne.ai_fab aif,
                                               ass_organe_famille aof
                                         WHERE f.contexte = pcontexte
                                           AND aof.num_suivi = &pelement
                                           AND aof.niveau = 2
                                           AND f.idt_pere = aof.idt_famille
                                           AND c.type_crit <> 'MACRO'
                                           AND f.idt_famille = b.idt_famille
                                           AND b.idt_bloc = c.idt_bloc
                                           AND c.operateur = '<<'
                                           AND aif.contexte = pcontexte
                                           AND aif.nro_suivi = &pelement
                                           AND aif.type_info = c.type_crit
                                           AND aif.valeur_info >= c.valeur
                                           AND aif.valeur_info <= c.valeur2
                               UNION SELECT DISTINCT avm.num_suivi, c.idt_bloc,
                                               c.idt_critere
                              -- evaluation des critres macro pour des valeurs '='
                                          FROM famille f,
                                               bloc b,
                                               critere c,
                                               ass_vi_macro avm,
                                               ass_organe_famille aof
                                         WHERE f.contexte = pcontexte
                                           AND aof.num_suivi = &pelement
                                           AND aof.niveau = 2
                                           AND f.idt_pere = aof.idt_famille
                                           AND c.type_crit = 'MACRO'
                                           AND f.idt_famille = b.idt_famille
                                           AND b.idt_bloc = c.idt_bloc
                                           AND c.operateur = '='
                                           AND avm.num_suivi = &pelement
                                           AND avm.selection = c.valeur
                                           AND avm.contexte = pcontexte
                               UNION (SELECT DISTINCT &pelement AS num_suivi, c.idt_bloc,
                                                c.idt_critere
                             -- evaluation des critres macro pour des valeurs '!='
                                           FROM famille f,
                                                bloc b,
                                                critere c,
                                                ass_organe_famille aof
                                          WHERE f.contexte = pcontexte
                                            AND aof.num_suivi = &pelement
                                            AND aof.niveau = 2
                                            AND f.idt_pere = aof.idt_famille
                                            AND c.type_crit = 'MACRO'
                                            AND f.idt_famille = b.idt_famille
                                            AND b.idt_bloc = c.idt_bloc
                                            AND c.operateur = '!='
                                MINUS SELECT DISTINCT avm.num_suivi, c.idt_bloc,
                                                c.idt_critere
                                           FROM famille f,
                                                bloc b,
                                                critere c,
                                                ass_vi_macro avm
                                          WHERE c.type_crit = 'MACRO'
                                            AND f.idt_famille = b.idt_famille
                                            AND b.idt_bloc = c.idt_bloc
                                            AND c.operateur = '!='
                                            AND avm.num_suivi = &pelement
                                            AND avm.selection = c.valeur
                                            AND avm.contexte = pcontexte))
                     GROUP BY nro_suivi, idt_bloc) datavalid,
                    (SELECT   idt_famille, idt_bloc, COUNT (idt_critere) AS nbvalavalider
                     -- liste les blocs ¿alider pour un VI et pour ses selections
                         FROM (SELECT DISTINCT f.idt_famille, c.idt_bloc,
                                               c.idt_critere
                                          FROM famille f,
                                               bloc b,
                                               critere c,
                                               ass_organe_famille aof
                                         WHERE f.contexte = pcontexte
                                           AND aof.num_suivi = &pelement
                                           AND aof.niveau = 2
                                           AND f.idt_pere = aof.idt_famille
                                           AND f.idt_famille = b.idt_famille
                                           AND b.idt_bloc = c.idt_bloc)
                     GROUP BY idt_famille, idt_bloc) dataavalider
              WHERE dataavalider.idt_bloc = datavalid.idt_bloc
                AND dataavalider.nbvalavalider = datavalid.nbvalvalid
    );
    ... désolé elle n'est pas très lisible.

    Je ne comprends pas pourquoi cette erreur est générée.
    Toutes les recherches que j'ai fait sur ce genre de problème me conduisent vers des problème de Curseurs ou de ROW_ID explicite, alors que je n'ai rien de tout ça.
    J'ai également reconstruit tous les index, mais sans succès.

    Vous avez des idées ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je précise que j'utilise une base en 10.2.0.4

    J'ai un job de reconstruction d'index qui peut tourner durant l'exécution de la requête : je pense que c'est la cause de mon problème.
    Mais n'y a t'il pas des verrous qui protègent justement de ce genre de problème ? La cohérence des données et index n'est elle pas garantie (même si un REBUILD est exécuté par une autre session) ?

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    C'est probablement le REBUILD qui pose problème en effet.

    Note que UNION fait déjà un DISTINCT donc UNION SELECT DISTINCT c'est une surcharge inutile. J'ai pas regardé dans le détail mais il me semble que tu pourrais simplifié et donc optimiser ta requête notamment avec des IN ou NOT IN.

Discussions similaires

  1. ORA-01410: ROWID non valide
    Par scazikiss dans le forum Administration
    Réponses: 2
    Dernier message: 09/10/2012, 21h09
  2. ORA-01410: ROWID non valide
    Par scazikiss dans le forum Installation
    Réponses: 0
    Dernier message: 05/10/2012, 18h24
  3. ORA-01722: Nombre non valide
    Par misa dans le forum Oracle
    Réponses: 4
    Dernier message: 18/12/2007, 15h23
  4. [PL/SQL] ORA-01001: curseur non valide
    Par sider_winder dans le forum SQL
    Réponses: 1
    Dernier message: 03/05/2007, 09h37
  5. [SQLLDR]ORA-01722: Nombre non valide
    Par syl2095 dans le forum Oracle
    Réponses: 5
    Dernier message: 22/05/2006, 15h42

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