Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden Sie die Oracle-Sequenz, um die Protokoll-ID in 2 Tabellen von jdbc einzufügen?

Im Allgemeinen wird MAX(log_id) ausgewählt gibt Ihnen nicht denselben Wert wie logid_seq.nextval bereitgestellt. Angenommen, es handelt sich um ein Mehrbenutzersystem, könnte ein anderer Benutzer eine weitere Zeile mit einer größeren log_id eingefügt haben Wert als die Zeile, die Sie gerade eingefügt haben, bevor Ihre Abfrage ausgeführt wird.

Angenommen, dass sowohl INSERT Anweisungen in derselben Sitzung ausgeführt werden, ist die einfachste Option wahrscheinlich die Verwendung von logid_seq.currval im zweiten INSERT Aussage. currval gibt den letzten Wert der Sequenz zurück, der an die aktuelle Sitzung zurückgegeben wurde, sodass immer derselbe Wert zurückgegeben wird, der von nextval generiert wurde Aufruf in der ersten Anweisung.

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

Alternativ können Sie auch den RETURNING verwenden -Klausel in Ihrer ersten Anweisung, um den Sequenzwert in eine lokale Variable zu holen und diesen im zweiten INSERT zu verwenden Aussage. Aber das ist wahrscheinlich mehr Arbeit, als einfach nur currval zu verwenden .