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

Como criar uma sequência Oracle começando com o valor máximo de uma tabela?


Se você pode usar PL/SQL, tente (EDIT:Incorpora a sugestão xlnt de Neil para começar no próximo valor mais alto):
SELECT 'CREATE SEQUENCE transaction_sequence MINVALUE 0 START WITH '||MAX(trans_seq_no)+1||' INCREMENT BY 1 CACHE 20'
  INTO v_sql
  FROM transaction_log;

EXECUTE IMMEDIATE v_sql;

Outro ponto a ser considerado:Ao configurar o parâmetro CACHE para 20, você corre o risco de perder até 19 valores em sua sequência caso o banco de dados fique inativo. Os valores em CACHE são perdidos nas reinicializações do banco de dados. A menos que você esteja acertando a sequência com muita frequência ou não se importe muito com as lacunas, eu definiria como 1.

Um detalhe final:os valores que você especificou para CACHE e INCREMENT BY são os padrões. Você pode deixá-los fora e obter o mesmo resultado.