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

Bruger du Oracle-sekvens til at indsætte log-id i 2 tabeller fra jdbc?

Generelt vælges MAX(log_id) vil ikke give dig den samme værdi som logid_seq.nextval stillet til rådighed. Hvis det antages, at dette er et flerbrugersystem, kunne en anden bruger have indsat en anden række med et større log_id værdi end den række, du lige indsatte, før din forespørgsel blev udført.

Forudsat at både INSERT sætninger køres i samme session, er den enkleste mulighed sandsynligvis at bruge logid_seq.currval i den anden INSERT udmelding. currval returnerer den sidste værdi af sekvensen, der blev returneret til den aktuelle session, så den altid returnerer den samme værdi, som blev genereret af nextval indkald den første erklæring.

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

Alternativt kan du bruge RETURNING klausul i din første sætning for at hente sekvensværdien ind i en lokal variabel og bruge den i den anden INSERT udmelding. Men det er sandsynligvis mere arbejde end blot at bruge currval .



  1. samle en række til alle rækker og returnere alle rækker

  2. INSERT IGNORE vs INSERT ... PÅ DUBLIKAT NØGLOPDATERING

  3. Hvordan forbinder man to tabeller mysql?

  4. Sådan bruger du pgBackRest til at sikkerhedskopiere PostgreSQL og TimescaleDB