Cela fait 2 jours que j'essaye de trouver une erreur dans mon déclencheur mais rien ne va et sur le net pareil,je vous joins mon déclencheur,ainsi qu’une partie de mon application java où j'effectue mes insert.
J'ai 3 erreurs en faite :
J'ai essayé 2 méthodes pour mon déclencheur :Erreur SQL: ORA-02055: échec d'opération de mise à jour distribuée ; annulation requise
ORA-01403: aucune donnée trouvée
ORA-06512: à "UK.ALIMBEL", ligne 71
ORA-04088: erreur lors d'exécution du déclencheur 'UK.ALIMBEL'
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 1-------------------------------------- create or replace TRIGGER ALIMBEL for insert on MEDIA COMPOUND TRIGGER AFTER STATEMENT IS TYPE table_medias IS TABLE OF MEDIA%ROWTYPE INDEX BY BINARY_INTEGER; medi MEDIA%rowtype; t_medias table_medias; TYPE table_realiser IS TABLE OF REALISER_CREER%ROWTYPE INDEX BY BINARY_INTEGER; reali REALISER_CREER%rowtype; t_real table_realiser; TYPE table_jouer IS TABLE OF JOUER_DANS%ROWTYPE INDEX BY BINARY_INTEGER; jouer JOUER_DANS%rowtype; t_jouer table_jouer; TYPE table_langue IS TABLE OF PARLER%ROWTYPE INDEX BY BINARY_INTEGER; lang PARLER%rowtype; t_langue table_langue; TYPE table_souti IS TABLE OF SOUS_TITRER%ROWTYPE INDEX BY BINARY_INTEGER; souti SOUS_TITRER%rowtype; t_souti table_souti; fil FILM%rowtype; music CD%rowtype; pos integer; BEGIN SELECT Ean,titre,categorie,categorieamazon,asinmedia,sourcemedia,prix,devise,rang,avis,poids,largeur,longueur,profondeur,nbstock,image_article,transfert BULK COLLECT INTO t_medias FROM MEDIA WHERE Transfert = 0; IF t_medias.COUNT >20 THEN pos:=1; while(pos <= t_medias.LAST AND pos<=20) loop medi := t_medias(pos); IF(pos=1) THEN BEGIN INSERT INTO FOURNISSEUR@DB_BEL_UK VALUES('100','Amazon',null); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END IF; BEGIN INSERT INTO media@DB_BEL_UK (SELECT Ean,titre,categorie,categorieamazon,asinmedia,sourcemedia,prix,devise,rang,avis,poids,largeur,longueur,profondeur,nbstock,'100',image_article FROM MEDIA WHERE ean=medi.ean); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; IF(medi.categorie = 'movie') THEN BEGIN SELECT * INTO fil FROM FILM where ean = medi.ean; INSERT INTO FILM@DB_BEL_UK VALUES(fil.ean,fil.studio,fil.formatFilm,fil.nbdisque,fil.typepublic,fil.duree,fil.datesortie,fil.region); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_jouer FROM JOUER_DANS WHERE ean = medi.ean; FOR i IN 1..t_jouer.COUNT LOOP jouer := t_jouer(i); BEGIN INSERT INTO ARTISTE@DB_BEL_UK VALUES(jouer.numArtiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO JOUER_DANS@DB_BEL_UK VALUES(medi.ean,jouer.numArtiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_langue FROM PARLER WHERE ean = medi.ean; FOR i IN 1..t_langue.COUNT LOOP lang := t_langue(i); BEGIN INSERT INTO LANGUE@DB_BEL_UK VALUES(lang.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO PARLER@DB_BEL_UK VALUES(medi.ean,lang.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_souti FROM SOUS_TITRER WHERE ean = medi.ean; FOR i IN 1..t_souti.COUNT LOOP souti := t_souti(i); BEGIN INSERT INTO LANGUE@DB_BEL_UK VALUES(souti.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO SOUS_TITRER@DB_BEL_UK VALUES(medi.ean,souti.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; END IF; IF(medi.categorie = 'music') THEN BEGIN SELECT * INTO music FROM CD where ean = medi.ean; INSERT INTO CD@DB_BEL_UK VALUES(music.ean,music.label,music.nbdisque,music.datesortie); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END IF; SELECT * BULK COLLECT INTO t_real FROM REALISER_CREER WHERE ean = medi.ean; FOR i IN 1..t_real.COUNT LOOP reali := t_real(i); BEGIN INSERT INTO ARTISTE@DB_BEL_UK VALUES(reali.numartiste) ; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO REALISER_CREER@DB_BEL_UK VALUES(medi.ean,reali.numartiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; UPDATE MEDIA set Transfert=1 where ean = medi.ean; pos := pos+1; END LOOP; end if; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END AFTER STATEMENT; END;
-----------------------------------------------------------------------------------
--------------------------------------------------------------------
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176 2------------------------------------------------------------------- create or replace TRIGGER ALIMBEL for insert on MEDIA COMPOUND TRIGGER AFTER STATEMENT IS TYPE table_medias IS TABLE OF MEDIA%ROWTYPE INDEX BY BINARY_INTEGER; medi MEDIA%rowtype; t_medias table_medias; TYPE table_realiser IS TABLE OF REALISER_CREER%ROWTYPE INDEX BY BINARY_INTEGER; reali REALISER_CREER%rowtype; t_real table_realiser; TYPE table_jouer IS TABLE OF JOUER_DANS%ROWTYPE INDEX BY BINARY_INTEGER; jouer JOUER_DANS%rowtype; t_jouer table_jouer; TYPE table_langue IS TABLE OF PARLER%ROWTYPE INDEX BY BINARY_INTEGER; lang PARLER%rowtype; t_langue table_langue; TYPE table_souti IS TABLE OF SOUS_TITRER%ROWTYPE INDEX BY BINARY_INTEGER; souti SOUS_TITRER%rowtype; t_souti table_souti; fil FILM%rowtype; music CD%rowtype; pos integer; BEGIN SELECT * FROM MEDIA WHERE Transfert = 0; IF t_medias.COUNT >20 THEN pos:=1; while(pos <= t_medias.LAST AND pos<=20) loop medi := t_medias(pos); IF(pos=1) THEN BEGIN INSERT INTO FOURNISSEUR@DB_BEL_UK VALUES('100','Amazon',null); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END IF; BEGIN INSERT INTO media@DB_BEL_UK (Ean,titre,categorie,categorieamazon,asinmedia,sourcemedia,prix,devise,rang,avis,poids,largeur,longueur,profondeur,nbstock,idfournisseur); VALUES(medi.ean, medi.titre, medi.categorie, medi.categorieamazon, medi.asinmedia, medi.sourcemedia, medi.prix, medi.devise , medi.rang, medi.avis, medi.poids, medi.largeur, medi.longueur, medi.profondeur, medi.nbstock,'100'); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; update MEDIA@DB_BEL_UK set IMAGE_ARTICLE = medi.IMAGE_ARTICLE WHERE EAN = medi.ean; IF(medi.categorie = 'movie') THEN BEGIN SELECT * INTO fil FROM FILM where ean = medi.ean; INSERT INTO FILM@DB_BEL_UK VALUES(fil.ean,fil.studio,fil.formatFilm,fil.nbdisque,fil.typepublic,fil.duree,fil.datesortie,fil.region); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_jouer FROM JOUER_DANS WHERE ean = medi.ean; FOR i IN 1..t_jouer.COUNT LOOP jouer := t_jouer(i); BEGIN INSERT INTO ARTISTE@DB_BEL_UK VALUES(jouer.numArtiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO JOUER_DANS@DB_BEL_UK VALUES(medi.ean,jouer.numArtiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_langue FROM PARLER WHERE ean = medi.ean; FOR i IN 1..t_langue.COUNT LOOP lang := t_langue(i); BEGIN INSERT INTO LANGUE@DB_BEL_UK VALUES(lang.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO PARLER@DB_BEL_UK VALUES(medi.ean,lang.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; BEGIN SELECT * BULK COLLECT INTO t_souti FROM SOUS_TITRER WHERE ean = medi.ean; FOR i IN 1..t_souti.COUNT LOOP souti := t_souti(i); BEGIN INSERT INTO LANGUE@DB_BEL_UK VALUES(souti.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO SOUS_TITRER@DB_BEL_UK VALUES(medi.ean,souti.Langue); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN NO_DATA_FOUND THEN NULL; END; END IF; IF(medi.categorie = 'music') THEN BEGIN SELECT * INTO music FROM CD where ean = medi.ean; INSERT INTO CD@DB_BEL_UK VALUES(music.ean,music.label,music.nbdisque,music.datesortie); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END IF; SELECT * BULK COLLECT INTO t_real FROM REALISER_CREER WHERE ean = medi.ean; FOR i IN 1..t_real.COUNT LOOP reali := t_real(i); BEGIN INSERT INTO ARTISTE@DB_BEL_UK VALUES(reali.numartiste) ; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; BEGIN INSERT INTO REALISER_CREER@DB_BEL_UK VALUES(medi.ean,reali.numartiste); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; END; END LOOP; UPDATE MEDIA set Transfert=1 where ean = medi.ean; pos := pos+1; END LOOP; end if; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END AFTER STATEMENT; END;
Programme JAVA :
---------------------------------------------------------------------
Code java : 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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282 public void insert_movie(Vector<Movie> mov) { System.out.println("Taille:" + mov.size()); for (int i = 0; i < mov.size(); i++) { Movie p = mov.get(i); String resultat = null; try { resultat = this.Requet(p.getAsin(), "MEDIA", "ASINMEDIA", "ASINMEDIA"); } catch (SQLException ex) { System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } if (resultat == null) { PreparedStatement stmt=null; if (i == 0 && base.equals("BEL")==true) { try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO FOURNISSEUR VALUES('100','Amazon',null)"); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } System.out.printf("prepare satement meida \n"); try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO MEDIA VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); stmt.setString(1,p.getAsin()); if (p.getTitle() == null) stmt.setString(2,null); else stmt.setString(2,p.getTitle()); if (p.getCategory() == null) stmt.setString(3,null); else stmt.setString(3,p.getCategory()); if (p.getCategory_amazon() == null) stmt.setString(4,null); else stmt.setString(4,p.getCategory_amazon()); if (p.getAsin() == null) stmt.setString(5,null); else stmt.setString(5,p.getAsin()); if (p.getEndpoint() == null) stmt.setString(6,null); else stmt.setString(6,p.getEndpoint()); stmt.setFloat(7,p.getPrice()); if (base.equals("BEL") == true) stmt.setString(8,"EURO"); if (base.equals("UK") == true) stmt.setString(8,"STERLING"); stmt.setInt(9,p.getRank()); stmt.setFloat(10,p.getReview()); stmt.setFloat(11,p.getWeight()); stmt.setFloat(12,p.getDim_height()); stmt.setFloat(13,p.getDim_depth()); stmt.setFloat(14,p.getDim_width()); stmt.setInt(15,0); if(base.equals("UK")==false) { stmt.setString(16,"100"); } File monImage = null; FileInputStream istreamImage = null; try { monImage = new File("Image/image_" + p.getAsin() + ".jpg"); istreamImage = new FileInputStream(monImage); if(base.equals("UK")==false) stmt.setBinaryStream(17, istreamImage, (int) monImage.length()); else stmt.setBinaryStream(16, istreamImage, (int) monImage.length()); } catch (FileNotFoundException ex) { if(base.equals("UK")==false) stmt.setBinaryStream(17,null,0); else stmt.setBinaryStream(16,null,0); } if (base.equals("UK") == true) stmt.setInt(17,0); stmt.executeUpdate(); stmt.close(); resultat = null; try { resultat = this.Requet(p.getAsin(), "MEDIA", "ASINMEDIA", "EAN"); } catch (SQLException ex) { System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } if (resultat != null) { p.setAsin(resultat); } System.out.printf("prepare satement film \n"); try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO FILM VALUES(?,?,?,?,?,?,?,?)"); stmt.setString(1,p.getAsin()); if (p.getStudio() == null) stmt.setString(2,null); else stmt.setString(2,p.getStudio()); if (p.getformats().isEmpty() == true) { stmt.setString(3,null); } else { String forma = null; for (int j = 0; j < p.getformats().size(); j++) { if (j == 0) { forma = p.getformats().get(j); } else { forma += "," + p.getformats().get(j); } } stmt.setString(3,forma); } stmt.setInt(4,p.getdiscs()); if (p.getRating() == null) stmt.setString(5,null); else stmt.setString(5,p.getRating()); if (p.getruntime() == null) stmt.setString(6,null); else stmt.setString(6,p.getruntime()); if (p.getrelease_date() == null) stmt.setString(7,null); else stmt.setString(7,p.getrelease_date()); stmt.setInt(8,p.getRegion()); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } System.out.printf("acteur \n"); if (p.getActors().isEmpty() == false) { for (int j = 0; j < p.getActors().size(); j++) { try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO ARTISTE VALUES(?)"); stmt.setString(1,p.getActors().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO JOUER_DANS VALUES(?,?)"); stmt.setString(1,p.getAsin()); stmt.setString(2,p.getActors().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } } if (p.getDirectors().isEmpty() == false) { for (int j = 0; j < p.getDirectors().size(); j++) { try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO ARTISTE VALUES(?)"); stmt.setString(1,p.getDirectors().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO REALISER_CREER VALUES(?,?)"); stmt.setString(1,p.getAsin()); stmt.setString(2,p.getDirectors().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } } if (p.getLanguage().isEmpty() == false) { for (int j = 0; j < p.getLanguage().size(); j++) { try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO LANGUE VALUES(?)"); stmt.setString(1,p.getLanguage().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO PARLER VALUES(?,?)"); stmt.setString(1,p.getAsin()); stmt.setString(2,p.getLanguage().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } } if (p.getSubtitles().isEmpty() == false) { for (int j = 0; j < p.getSubtitles().size(); j++) { try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO LANGUE VALUES(?)"); stmt.setString(1,p.getSubtitles().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } try { stmt = this.getConnect_oracle().getConnection().prepareStatement("INSERT INTO SOUS_TITRER VALUES(?,?)"); stmt.setString(1,p.getAsin()); stmt.setString(2,p.getSubtitles().get(j)); stmt.executeUpdate(); stmt.close(); } catch (SQLException ex) { stmt.close(); System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } } }catch (SQLException ex) { try { stmt.close(); } catch (SQLException ex1) { Logger.getLogger(Insertion.class.getName()).log(Level.SEVERE, null, ex1); } System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } else { Statement stmt = null; try { stmt = this.getConnect_oracle().getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); stmt.execute("UPDATE MEDIA set nbstock = nbstock +1 WHERE asinmedia = '" + p.getAsin() + "'"); if(base.equals("UK")==true) { resultat=null; resultat = this.Requet(p.getAsin(), "MEDIA", "ASINMEDIA", "EAN"); stmt.execute("UPDATE MEDIA@DB_BEL_UK set nbstock = nbstock +1 WHERE ean = " +resultat); } stmt.close(); } catch (SQLException ex) { System.out.printf("Erreur SQL: %s \n", ex.getMessage()); } } } }
J'espere que vous sauriez m'aider
Merci d'avance
Partager