Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Używasz sekwencji Oracle do wstawiania identyfikatora dziennika do 2 tabel z jdbc?

Ogólnie rzecz biorąc, wybierając MAX(log_id) nie da ci tej samej wartości, co logid_seq.nextval pod warunkiem, że. Zakładając, że jest to system wielu użytkowników, inny użytkownik mógł wstawić kolejny wiersz z większym log_id wartość niż wiersz, który właśnie wstawiłeś przed wykonaniem zapytania.

Zakładając, że oba INSERT instrukcje są uruchamiane w tej samej sesji, najprostszą opcją jest prawdopodobnie użycie logid_seq.currval w drugim INSERT oświadczenie. currval zwróci ostatnią wartość sekwencji, która została zwrócona do bieżącej sesji, więc zawsze zwróci tę samą wartość, która została wygenerowana przez nextval zadzwoń w pierwszym oświadczeniu.

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

Alternatywnie możesz użyć RETURNING klauzulę w pierwszej instrukcji, aby pobrać wartość sekwencji do zmiennej lokalnej i użyć jej w drugiej INSERT oświadczenie. Ale to prawdopodobnie więcej pracy niż po prostu użycie currval .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę w rozsądny sposób rejestrować instrukcje UPDATE przy użyciu rejestrowania sterownika Oracle?

  2. Jak znaleźć pracownika z drugą najwyższą pensją?

  3. Transformacja wierszy Oracle do kolumny

  4. Jak wykonać funkcję w Oracle z parametrami

  5. Porównaj ciągi ignorujące akcenty w SQL (ORACLE)