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 .