Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando a sequência Oracle para inserir id de log em 2 tabelas do jdbc?


Em geral, selecionando o MAX(log_id) não fornecerá o mesmo valor que logid_seq.nextval forneceu. Assumindo que este é um sistema multiusuário, algum outro usuário poderia ter inserido outra linha com um log_id maior valor do que a linha que você acabou de inserir antes de sua consulta ser executada.

Assumindo que tanto INSERT instruções são executadas na mesma sessão, a opção mais simples é provavelmente usar o logid_seq.currval no segundo INSERT declaração. currval retornará o último valor da sequência que foi retornada para a sessão atual, portanto, sempre retornará o mesmo valor que foi gerado pelo nextval chamar na primeira instrução.
INSERT INTO tableB (LOG_ID, RESPONSE_CODE, RESPONSE_MSG) 
  VALUES( logid_seq.currval, ?, ? )

Alternativamente, você pode usar o RETURNING cláusula em sua primeira instrução para buscar o valor da sequência em uma variável local e usá-la no segundo INSERT declaração. Mas isso provavelmente é mais trabalhoso do que simplesmente usar o currval .