2013-07-11 13 views
1

Возможно ли создать последовательность с исключенным указанным номером, чтобы переменная последовательности не создавала указанные числа. Я могу создать последовательность, используя следующий SQL StatementПоследовательности Oracle исключают указанный номер

CREATE SEQUENCE s_test; 

CREATE SEQUENCE s_test2 
START WITH 10 INCREMENT BY 5 
MINVALUE 10 MAXVALUE 20 
CYCLE CACHE 2 ORDER; 

Причина, почему я должен это использование является то, что некоторые таблицы создаются и используются перед использованием идентификаторов последовательности и тыс из таблицы позволяет сказать 2,5,99,101 , Это означает, что можно использовать id 1,3,6 ... 98,100, и я не хочу, чтобы они не были пригодны для просмотра, начиная с 102.

Я просто хочу знать, как создавать некоторые номера номеров исключений.

+0

https://forums.oracle.com/thread/905417 – rags

+1

Почему вам все равно, если 1,3,6 ... пропущены? Просто начните с 102. Никто не должен ожидать, что последовательности будут плотными (движение вперед, вы все равно можете получить пробелы в числах из-за кеширования и т. Д.) – tbone

+0

это случай, и я ожидаю найти решение. В конце концов мы говорим о Oracle, который является настолько сложным, как любая операционная система. –

ответ

2

Ну, опция start with позволяет начать с любого конкретного номера, который вам нравится, - пропуская номера по пути.

Вы можете создать свою собственную пользовательскую функцию, чтобы вернуть нужные значения.

Или, когда nextval последовательности является число, которое вы хотите пропустить, то вы можете пропустить значение, используя что-то вроде:

alter sequence seq_name 
increment by 124; 

Это было бы возможно в триггер вставки, например, где последовательность используется для заполнения значения id.

Однако я задаю вопрос, почему вы хотели бы это сделать. Значения из последовательности обычно будут бессмысленными числами, используемыми для идентификатора.

EDIT:

Затем использовать триггер перед вставкой-проверить, если nextval уже используется. Если да, просто увеличивайте это значение.

+0

обновил мой вопрос –

Смежные вопросы