Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie erstelle ich eine Oracle-Sequenz, beginnend mit dem maximalen Wert aus einer Tabelle?

Wenn Sie PL/SQL verwenden können, versuchen Sie es (BEARBEITEN:Enthält Neils xlnt-Vorschlag, um beim nächsthöheren Wert zu beginnen):

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;

Ein weiterer zu beachtender Punkt:Wenn Sie den CACHE-Parameter auf 20 setzen, laufen Sie Gefahr, bis zu 19 Werte in Ihrer Sequenz zu verlieren, wenn die Datenbank ausfällt. Im Cache gespeicherte Werte gehen bei Datenbankneustarts verloren. Wenn Sie die Sequenz nicht sehr oft treffen oder sich Lücken nicht so sehr interessieren, würde ich sie auf 1 setzen.

Eine letzte Kleinigkeit:Die Werte, die Sie für CACHE und INCREMENT BY angegeben haben, sind die Standardwerte. Sie können sie weglassen und erhalten das gleiche Ergebnis.