последовательность в циклическом режиме в oracle

#oracle #sequence #cycle

#Oracle #последовательность #цикл

Вопрос:

Я попытался найти несколько реальных вариантов использования последовательностей в циклическом режиме.

мы можем использовать use sequence для генерации уникальных идентификаторов для первичных ключей, но это не обязательно, потому что мы также можем использовать IDENTITY .

можете ли вы дать мне несколько хороших практических сценариев для использования последовательности ЦИКЛОВ, увеличивающейся на 1, а затем на большее число, например 10 или 100?

Спасибо

Комментарии:

1. @Littlefoot все это хорошо объяснил, но я бы добавил, что столбцы идентификаторов все еще используют последовательность. Просто она создается и используется «за кулисами».

Ответ №1:

Как вы сказали, мы обычно используем последовательности для генерации уникальных значений — хороший выбор для первичных ключей. Поскольку первичные ключи не могут быть продублированы, нет особого смысла циклировать последовательность.

(Что касается столбцов идентификаторов: да, это опция в последних версиях базы данных Oracle, но они не существовали до 12c, поэтому мы использовали и до сих пор используем последовательности в более низких версиях).

Лично я никогда не использовал MAXVALUE ; большинство моих последовательностей просты, с использованием параметров по умолчанию, таких как

 create sequence seq;
 

Однако, если вы установите MAXVALUE и не обращаете внимания на количество значений, которые вы используете из него, как только вы достигнете максимума, вы получите

 ORA-08004: sequence SEQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated
 

Одно из решений этой проблемы — удалить maxvalue (или установить для нее более высокое значение); другое — использовать CYCLE так, чтобы — как только вы достигнете максимума — последовательность продолжала работать. Тем не менее, вы должны использовать CACHE параметр вместе с ним (и его значение должно быть меньше одного цикла):

 SQL> create sequence seq maxvalue 3 cycle;
create sequence seq maxvalue 3 cycle
*
ERROR at line 1:
ORA-04013: number to CACHE must be less than one cycle
 

Цикл равен «3», поэтому вы не можете установить CACHE значение выше этого. Это работает:

 SQL> create sequence seq maxvalue 3 cycle cache 2;

Sequence created.
 

Когда это использовать?

В случаях, когда ее значение является частью составного первичного ключа, где второй (фактически, другой) столбец (столбцы) гарантирует, что циклические значения последовательности не будут нарушать первичный ключ.

Другой вариант — промежуточная таблица; например, вы ежедневно получаете до 1 миллиона строк, представляющих платежи. Если для первичного ключа установлено значение number(6) , вы не можете разрешить неограниченную последовательность (без maxvalue ), потому что вы не сможете вставить значение выше 999,999 в этот столбец. Но, если вы используете CYCLE параметр, все будет работать нормально — дубликатов не будет, и значения будут соответствовать столбцу.