Bonjour,
dans mon programme je suis sensé lire une table source qui contient une colonne de type BLOB, et insérer certaines lignes dans une table cible.

Problème :
De temps en temps, mes inserts plantent avec l'erreur "ORA-00942: table or view does not exist".
Pourtant, mes inserts sont tous de la même forme :o

Voici la partie du code concernée :

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
									ConnexionOracleViaJdbc connexionCibleBlob = new ConnexionOracleViaJdbc(
											Lanceur.prop.getProperty("USER_CIBLE"),
											Lanceur.prop.getProperty("PASSWORD_CIBLE"),
											Lanceur.prop.getProperty("URL_ORACLE_CIBLE"));
 
									String insertWithBlob = ligneInsertion.toString().replace("EMPTY_BLOB()", " ? ");
									insertWithBlob = insertWithBlob.replace(" VALUES", " ("+sbColonnes.toString()+") VALUES");
									insertWithBlob = insertWithBlob.replace(table.getNom(), connexionCibleBlob.getOraclesource().getUser()+"."+table.getNom());
 
									PreparedStatement pstmt = connexionCibleBlob
											.createStatement(insertWithBlob);
									pstmt.setBlob(1, blob);
									pstmt.executeUpdate();
									pstmt.close();
									logger.log(Level.INFO,
											"\t\t[FIN] Traitement blob");
									connexionCibleBlob.fermer();
J'ai d'abord pensé que ça pouvais venir du fait que pour certaines lignes, la valeur de la colonne blob est vide.

Ce problème ne se produit pas si je modifie le code comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
									String insertWithBlob = ligneInsertion.toString().replace("EMPTY_BLOB()", " NULL ");
									insertWithBlob = insertWithBlob.replace(" VALUES", " ("+sbColonnes.toString()+") VALUES");
									insertWithBlob = insertWithBlob.replace(table.getNom(), connexionCibleBlob.getOraclesource().getUser()+"."+table.getNom());
 
									PreparedStatement pstmt = connexionCibleBlob
											.createStatement(insertWithBlob);
									//pstmt.setBlob(1, blob);
									pstmt.executeUpdate();
									pstmt.close();
									logger.log(Level.INFO,
											"\t\t[FIN] Traitement blob");
									connexionCibleBlob.fermer();

le problème viendrait donc des paramètres de notre statement, mais pourquoi, grand question :o