410013796724260
• Webmoney
R335386147728
Z369087728698
Create SEQUENCEПоследовательность SEQUENCE это объект базы данных, предназначенный для генерации целых чисел в соответствии с правилами, установленными при его создании. Генерируемые числа могут быть как положительные, так и отрицательные. Как правило, SEQUENCE используют для автоматической генерации значений первичных ключей. Последовательность является объектом базы данных, и генерируемое ею значения можно использовать для различных таблиц. Синтаксис CREATE SEQUENCEВ общем виде синтаксис создания последовательности SEQUENCE для СУБД Oracle можно представить в следующем виде : CREATE SEQUENCE [SCHEMA.]SEQUENCE_NAME [START WITH start_num] [INCREMENT BY increment_num] [ { MAXVALUE maximum_num | NOMAXVALUE } ] [ { MINVALUE minimum_num | NOMINVALUE } ] [ { CYCLE | NOCYCLE } ] [ { CACHE cache_num | NOCACHE } ] [ { ORDER | NOORDER } ]; Несмотря на однозначное назначение SEQUENCE в различных СУБД имеются определенные различия, которые и будут рассмотрены в данной статье. Тип генерируемого SEQUENCE значенияВ Oracle для последовательности установлено максимальное значение равное 1027, минимальное значение соответственно -1026. В СУБД PostgreSQL при генерации значения последовательностью используется тип bigint, определяемое 8-байтным числом в диапазоне от -9223372036854775808 до 9223372036854775807. В некоторых старых версиях поддерживается значение в диапазоне от -2147483648 до +2147483647. В MS SQL тип генерируемого значения можно определить при помощи оператора [ built_in_integer_type | user-defined_integer_type]. Если тип данных не указан, то по умолчанию используется тип bigint. Синтаксис выражения CREATE SEQUENCE для СУБД MS SQL : CREATE SEQUENCE [SCHEMA.]SEQUENCE_NAME [AS [ built_in_integer_type | user-defined_integer_type ]] [START WITH start_num] ... SEQUENCE СУБД MS SQL может быть определена с определенным типом. Допускаются следующие типы :
Для SEQUENCE СУБД Apache Derby, аналогично MS SQL, может быть определен тип. Допускаются типы smallint, int, bigint. Синтаксис генератора последовательности SEQUENCE СУБД Apache Derby : CREATE SEQUENCE [SCHEMA.]SEQUENCE_NAME [AS AS dataType ] [START WITH start_num] ... Атрибуты SEQUENCESCHEMASCHEMA определяет схему, в которой создается последовательность. Если SCHEMA опущена, то :
SEQUENCE_NAMESEQUENCE_NAME определяет имя создаваемой последовательности. START WITHSTART WITH start_num — это первое значение, возвращаемое объектом последовательности. Значение должно быть не больше максимального и не меньше минимального значения объекта последовательности. По умолчанию начальным значением для нового объекта последовательности служит минимальное значение для объекта возрастающей последовательности и максимальное — для объекта убывающей. INCREMENT BYINCREMENT BY increment_num - приращение генерируемого значения при каждом обращении к последовательности. По умолчанию значение равно 1, если не указано явно. Для возрастающих последовательностей приращение положительное, для убывающих — отрицательное. Приращение не может быть равно 0. Для PostgreSQL можно использовать только INCREMENT. MAXVALUE maximum_numMAXVALUE — максимальное значение maximum_num, создаваемое последовательностью. Если оно не указано, то применяется значение по умолчанию NOMAXVALUE. MINVALUE minimum_numMINVALUE — минимальное значение minimum_num, создаваемое последовательностью. Если оно не указано, то применяется значение по умолчанию NOMINVALUE. NOMAXVALUENOMAXVALUE в Oracle определяет максимальное значение равное 1027, если последовательность возрастает, или -1, если последовательность убывает. По умолчанию принимается NOMAXVALUE. В СУБД PostgreSQL при включении данного параметры в скрипт необходимо использовать следующий синтаксис : NO MAXVALUE. Значение по умолчанию равно 263-1 или -1 для возрастающей или убывающей последовательности соответственно. NOMINVALUENOMINVALUE в Oracle определяет минимальное значение равное 1, если последовательность возрастает, или -1026, если последовательность убывает. В СУБД PostgreSQL при включении данного параметры в скрипт необходимо использовать следующий синтаксис : NO MINVALUE. Значение по умолчанию равно -263-1 или 1 для убывающей или возрастающей последовательности соответственно. CYCLEПрименение в скрипте CYCLE позволяет последовательности повторно использовать созданные значения при достижении MAXVALUE или MINVALUE. Т.е. последовательность будет повторно гененировать значения с начальной позиции (со START'a). По умолчанию используется значение NOCYCLE. Указывать CYCLE вместе с NOMAXVALUE или NOMINVALUE нельзя. NOCYCLENOCYCLE указывает, что последовательность не сможет генерировать значения после достижения максимума или минимума. CACHE cache_numОператор CACHE в скрипте позволяет создавать заранее и поддерживать в памяти заданное количество значений последовательности для быстрого доступа. В СУБД PostgreSQL минимальное значение равно 1 и соответствует значению NOCACHE. В СУБД Oracle минимальное значение равно 2. ORDERДанный оператор используется только в СУБД Oracle. Он гарантирует, что номера последовательности генерируются в порядке запросов. Если упорядочение нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию NOORDER, который не гарантирует, что номера последовательности генерируются в порядке запросов Применение последовательностиПример Oracle SEQUENCE : -- создание последовательности в Oracle CREATE SEQUENCE seq_orders START WITH 10 INCREMENT BY 2 MAXVALUE 200000 MINVALUE 5 CYCLE ORDER CACHE 2; -- генерирование значения select seq_orders.nextval FROM dual; Пример MS SQL SEQUENCE : -- создание последовательности в MS SQL CREATE SEQUENCE test.seq_users AS decimal(3,0) START WITH 25 INCREMENT BY 5 MINVALUE 50 MAXVALUE 2000 CYCLE CACHE 3; -- генерирование значения : используется NEXT VALUE FOR SELECT NEXT VALUE FOR test.seq_users; Пример PostgreSQL SEQUENCE : -- создание последовательности в PostgreSQL CREATE SEQUENCE seq_users START 20; -- генерирование значения select nextval('seq_users'); Пример Apache Derby SEQUENCE : -- создание последовательности CREATE SEQUENCE seq_orders AS BIGINT START WITH 30; -- генерирование значения UPDATE orders SET id = NEXT VALUE FOR order_id WHERE num like '%20151110/12%'; Удаление последовательности, DROP SEQUENCEСинтаксис удаления последовательности : DROP SEQUENCE [SCHEMA.]SEQUENCE_NAME; |