Je base de données Oracle 10gR2 avec table IOT dans le secteur:Impossible de mettre à jour la table Oracle IOT avec la méthode JBDC updateRow
create table countries (
id number primary key,
name varchar2(30) not null enable
) organization index;
J'essaie de mettre à jour les valeurs de la table avec ce code Java (version 1.6):
Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
ResultSet src = stmt.executeQuery("select id, name from countries");
src.next();
src.updateString("name", "__test__");
src.updateRow();
Mais updateRow lève SQLException (ORA-01410: ROWID non valide). Si j'essaye de mettre à jour une table de tas (ordinaire) - tout fonctionne.
J'ai utiliser ce code avec différentes versions de pilotes Oracle (d'ici http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html)
Après quelques recherches, j'ai détecté que IOT et table HEAP ont format différent de rowids:
IOT exemple * BAJzKgwCwRb +
exemple HEAP AAAbgVAAJAAMyr8AAA
Mais je ne sais pas encore comment résoudre ce problème. Avez-vous des idées?
Trace est une excellente idée! Merci! A propos de votre idée de contournement: merci, mais je n'ai pas besoin de solution de contournement, je veux comprendre pourquoi ce n'est pas le travail. Est-ce un bug ou une restriction de mise en œuvre ou juste mon erreur. – glebreutov