La valeur de l'ID généré automatiquement ne sait pas qu'après l'INSERT est exécutée, parce que d'autres déclarations pourraient être en même temps et le exécutaient SGBDR va décider comment planifier lequel commence.
Toute fonction que vous appelez dans une expression de l'instruction INSERT doit être évaluée avant l'insertion de la nouvelle ligne et, par conséquent, elle ne peut pas savoir quelle valeur d'ID est générée.
je peux penser à deux options qui sont proches de ce que vous demandez:
écrire un trigger qui court après INSERT, donc vous avez accès à la valeur de clé ID générée. Ecrivez une procédure pour envelopper l'insertion, de sorte que vous puissiez exécuter un autre code dans la procédure et interroger le dernier ID généré.
Cependant, je soupçonne que ce que vous demandez vraiment est de savoir si vous pouvez interroger la dernière valeur d'ID généré par session en cours, même si d'autres sessions insèrent également des lignes et de générer leurs propres valeurs d'identité. Vous pouvez être assuré que chaque SGBDR qui offre une fonction d'auto-incrémentation offre un moyen d'interroger cette valeur, et il vous indique le dernier ID généré dans votre portée de session actuelle. Ceci n'est pas affecté par les insertions effectuées dans d'autres sessions.
Pouvez-vous donner un exemple de ce que vous voulez faire, en supposant qu'il était possible ? – skaffman
Bien sûr. Considérons void table A (id [autoincrement], champ). Je voudrais quelque chose comme: long id = jdbcStatement.execute ("insérer dans A (field) values ('blah')"); Long id = jdbcStatement.execute ("insérer dans A (id, field) values (sequence.nextval, 'blah')"); Je veux id = 1, et tout fait en un seul accès à la base de données –
+1 Bonne question et utile lors de l'insertion d'objets qui sont liés du côté de Java. –