Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzo della sequenza Oracle per inserire l'ID di registro in 2 tabelle da jdbc?

In generale, selezionando il MAX(log_id) non ti darà lo stesso valore che logid_seq.nextval fornito. Supponendo che si tratti di un sistema multiutente, un altro utente potrebbe aver inserito un'altra riga con un log_id più grande valore rispetto alla riga appena inserita prima dell'esecuzione della query.

Supponendo che entrambi INSERT le istruzioni vengono eseguite nella stessa sessione, l'opzione più semplice è probabilmente quella di utilizzare logid_seq.currval nel secondo INSERT dichiarazione. currval restituirà l'ultimo valore della sequenza che è stato restituito alla sessione corrente, quindi restituirà sempre lo stesso valore generato da nextval chiama nella prima affermazione.

INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG) 
  VALUES( logid_seq.currval, ?, ? )

In alternativa, puoi utilizzare il RETURNING clausola nella prima istruzione per recuperare il valore della sequenza in una variabile locale e utilizzarlo nella seconda INSERT dichiarazione. Ma probabilmente è più lavoro che usare semplicemente il currval .