sql >> Databasteknik >  >> RDS >> Oracle

Använder du Oracle-sekvens för att infoga logg-id i två tabeller från jdbc?

I allmänhet väljer du MAX(log_id) kommer inte att ge dig samma värde som logid_seq.nextval försedd. Förutsatt att detta är ett fleranvändarsystem, kunde någon annan användare ha infogat en annan rad med ett större log_id värde än raden du precis infogade innan din fråga kördes.

Förutsatt att både INSERT uttalanden körs i samma session, det enklaste alternativet är förmodligen att använda logid_seq.currval i den andra INSERT påstående. currval returnerar det sista värdet av sekvensen som returnerades till den aktuella sessionen så att det alltid returnerar samma värde som genererades av nextval ring in det första uttalandet.

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

Alternativt kan du använda RETURNING sats i din första sats för att hämta sekvensvärdet till en lokal variabel och använd den i den andra INSERT påstående. Men det är förmodligen mer arbete än att bara använda currval .



  1. postgresql gör befintlig primärnyckel automatisk inkrementering vid infogning

  2. Rekursiv SQL-sats (Postgresql) - förenklad version

  3. Kör ett skalskript när en databaspost skrivs till postgres

  4. MySQL:infoga värden från en annan tabell i en kolumn