sql >> Base de Datos >  >> RDS >> Oracle

¿Usando la secuencia de Oracle para insertar la identificación de registro en 2 tablas desde jdbc?

En general, seleccionando MAX(log_id) no le dará el mismo valor que logid_seq.nextval previsto. Suponiendo que se trata de un sistema multiusuario, algún otro usuario podría haber insertado otra fila con un log_id más grande valor que la fila que acaba de insertar antes de que se ejecute su consulta.

Suponiendo que ambos INSERT las declaraciones se ejecutan en la misma sesión, la opción más simple es probablemente usar el logid_seq.currval en el segundo INSERT declaración. currval devolverá el último valor de la secuencia que se devolvió a la sesión actual, por lo que siempre devolverá el mismo valor que generó nextval llamar en la primera instrucción.

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

Alternativamente, podría usar el RETURNING cláusula en su primera declaración para obtener el valor de la secuencia en una variable local y usar eso en el segundo INSERT declaración. Pero eso es probablemente más trabajo que simplemente usar el currval .