В этом учебном материале вы узнаете, как создавать и удалять sequences (последовательности) в Oracle/PLSQL c синтаксисом и примерами.
Описание
В Oracle/PLSQL, вы можете создать автонумерацию с помощью последовательности. Последовательность является объектом Oracle, который используется для генерации последовательности чисел. Это может быть полезно, когда вам нужно создать уникальный номер в качестве первичного ключа.
CREATE SEQUENCE
Синтаксис
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;
sequence_name имя последовательности, которую вы хотите создать.
Пример
1 2 3 4 5 6 |
CREATE SEQUENCE supplier_seq MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1 INCREMENT BY 1 CACHE 20; |
Этот код создаст объект последовательность под названием supplier_seq. Первый номер последовательности 1, каждый последующий номер будет увеличиваться на 1 (т.е.. 2,3,4, ...). Это будет кэшировать до 20 значений для производительности.
Если вы опустите параметр MAXVALUE, ваша последовательность по умолчанию до:
Таким образом, вы можете упростить CREATE SEQUENCE. Написав следующее:
1 2 3 4 5 |
CREATE SEQUENCE supplier_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20; |
Теперь, когда вы создали объект последовательности для автонумерации поля счетчика, мы рассмотрим, как получить значение из этого объекта последовательности. Чтобы получить следующее значение, вам нужно использовать NEXTVAL.
Например:
Это позволит извлечь следующее значение из последовательности supplier_seq. Предложение NEXTVAL нужно использовать в SQL запросе. Например:
1 2 3 4 |
INSERT INTO suppliers (supplier_id, supplier_name) VALUES (supplier_seq.NEXTVAL, 'Kraft Foods'); |
Этот isert запрос будет вставлять новую запись в таблицу suppliers (поставщики). Полю Supplier_id будет присвоен следующий номер из последовательности supplier_seq. Поле supplier_name будет иметь значение 'Kraft Foods'.
DROP SEQUENCE
После того как вы создали последовательность в Oracle, вам можете понадобиться удалить её из базы данных.
Синтаксис:
sequence_name имя последовательности, которую вы хотите удалить.
Пример
Рассмотрим на примере, как удалить последовательность в Oracle.
Этот пример удалит последовательность supplier_seq.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Вопрос: При создании последовательности, что означают опции cache и nocache? Например, можно создать последовательность с опцией cache 20 следующим образом:
1 2 3 4 5 |
CREATE SEQUENCE supplier_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20; |
Или вы могли бы создать такую же последовательность, но с опцией nocache:
1 2 3 4 5 |
CREATE SEQUENCE supplier_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 NOCACHE; |
Ответ: Что касается последовательности, опция cache определяет, сколько значений последовательности будут сохранены в памяти для быстрого доступа.
Недостатком создания последовательности с cache, что если происходит отказ системы, все кэшированные значения последовательности, которые не были использованы, будут утеряны. Это приведет к разрывам в значениях, назначенной последовательности. Когда в система восстановится, Oracle будет кэшировать новые номера, с того места, где была прервана последовательность, игнорируя утерянные значения последовательности.
Примечание: Для восстановления утраченных значений последовательности, вы всегда можете выполнить команду ALTER SEQUENCE для сброса счетчика на правильное значение.
nocache означает, что ни одно из значений последовательности не хранятся в памяти. Эта опция может понизить производительность, однако, вы не должны столкнуться с разрывами в значениях, назначенной последовательности.
Вопрос: Как установить значение lastvalue в последовательность Oracle?
Ответ: Вы можете изменить lastvalue для последовательности Oracle, выполнив команду ALTER в последовательности.
Например, если последнее значение используемой последовательности Oracle был 100, и вы хотите, чтобы следующее значение было 225. Вы должны выполнить следующие команды.
1 2 3 4 5 6 7 |
ALTER SEQUENCE seq_name INCREMENT BY 124; SELECT seq_name.nextval FROM dual; ALTER SEQUENCE seq_name INCREMENT BY 1; |
Следующее значение последовательности, для использования, теперь будет 225.