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 ?