Il valore del ID generato automaticamente non è noto fino a dopo l'INSERT viene eseguita, perché altre dichiarazioni potrebbero essere in esecuzione contemporaneamente e RDBMS arriva a decidere come programmare quale inizia per primo.
Qualsiasi funzione chiamata in un'espressione nell'istruzione INSERT deve essere valutata prima dell'inserimento della nuova riga e quindi non può sapere quale valore ID viene generato.
posso pensare a due opzioni che sono vicino a quello che stai chiedendo:
Scrivi un trigger che viene eseguito dopo l'inserimento, in modo da avere accesso al valore chiave ID generato.
Scrivere una procedura per avvolgere l'inserto, in modo da poter eseguire altro codice nella procedura e interrogare l'ultimo ID generato.
Tuttavia, ho il sospetto quello che stai realmente chiedendo è se è possibile interrogare per l'ultimo valore ID generato dalla vostra sessione corrente anche se altre sessioni sono anche l'inserimento di righe e di generare i propri valori ID. Si può essere certi che ogni RDBMS che offre una funzione di incremento automatico offre un modo per interrogare questo valore e indica l'ultimo ID generato nell'ambito della sessione corrente. Questo non è influenzato dagli inserimenti eseguiti in altre sessioni.
fonte
2009-06-16 21:53:01
Può fare un esempio di ciò che si vuole fare, ammesso che fosse possibile ? – skaffman
Ovviamente. Considera la tabella void A (id [autoincrement], campo). Vorrei qualcosa del tipo: long id = jdbcStatement.execute ("inserisci in valori A (campo) ('blah')"); o long id = jdbcStatement.execute ("inserire in valori A (id, campo) (sequence.nextval, 'blah')"); Voglio id = 1, e tutto fatto in un solo accesso al DB –
+1 Buona domanda e utile quando si inseriscono oggetti che sono collegati sul lato di Java. –