Максимальное допустимое значение для 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

... так что это похоже на ошибку документации.

Другие вопросы по тегам