Максимальное допустимое значение для CACHE в последовательности CYCLE
CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE (?);
По формуле т.е.
(CEIL(MAXVALUE-MINVALUE))/ABS(INCREMENT)
Так,
(CEIL(14-1))/ABS(3)
Значение равно 4,33. Так что же является значением CACHE для вышеуказанной последовательности 4 или 5?
1 ответ
Вы взяли эту формулу из документации:
КЭШ
Укажите, сколько значений последовательности база данных предварительно распределяет и хранит в памяти для более быстрого доступа. Это целочисленное значение может содержать 28 или менее цифр. Минимальное значение для этого параметра - 2. Для последовательностей, которые циклически повторяются, это значение должно быть меньше, чем число значений в цикле. Вы не можете кэшировать больше значений, чем поместится в данный цикл порядковых номеров. Поэтому максимально допустимое значение дляCACHE
должно быть меньше значения, определенного по следующей формуле:(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
Похоже, вы пропустили часть "должен быть меньше" этого абзаца. Так что в вашем примере кеш должен быть меньше 4.333; и, следовательно, должно быть 4 - по крайней мере, в соответствии с документацией. Oracle действительно позволяет вам установить кэш на 5; это только жалуется на 6 или выше:
CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE 5;
Sequence DEMO_SEQ created.
drop sequence demo_seq;
Sequence DEMO_SEQ dropped.
CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE 6;
ORA-04013: number to CACHE must be less than one cycle
... так что это похоже на ошибку документации.