sql >> Databáze >  >> RDS >> Oracle

Jak vytvořit sekvenci Oracle začínající maximální hodnotou z tabulky?

Pokud můžete použít PL/SQL, zkuste (UPRAVIT:Zahrnuje Neilův návrh xlnt začít na další vyšší hodnotě):

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;

Další bod ke zvážení:Nastavením parametru CACHE na 20 riskujete ztrátu až 19 hodnot ve vaší sekvenci, pokud databáze selže. Hodnoty uložené v mezipaměti jsou ztraceny při restartování databáze. Pokud na sekvenci nenarážíte velmi často nebo pokud vás mezery tolik nezajímají, nastavil bych ji na 1.

Jedna poslední nit:hodnoty, které jste zadali pro CACHE a INCREMENT BY, jsou výchozí hodnoty. Můžete je nechat vypnuté a získat stejný výsledek.



  1. Optimalizace dotazu Postgres (vynucení skenování indexu)

  2. Úplné ignorování časových pásem v Rails a PostgreSQL

  3. Jak odebrat sloupec v SQL Server pomocí T-SQL

  4. Únik z jednoduché uvozovky v PHP při vkládání do MySQL