Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment créer une séquence Oracle commençant par la valeur max à partir d'une table ?

Si vous pouvez utiliser PL/SQL, essayez (EDIT :Incorpore la suggestion xlnt de Neil pour commencer à la valeur supérieure suivante) :

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;

Autre point à considérer :en définissant le paramètre CACHE sur 20, vous courez le risque de perdre jusqu'à 19 valeurs dans votre séquence si la base de données tombe en panne. Les valeurs CACHE sont perdues lors des redémarrages de la base de données. À moins que vous n'utilisiez la séquence très souvent, ou que vous ne vous souciez pas trop des écarts, je le réglerais sur 1.

Un dernier nit :les valeurs que vous avez spécifiées pour CACHE et INCREMENT BY sont les valeurs par défaut. Vous pouvez les laisser désactivés et obtenir le même résultat.