Sequence (последовательность)
A sequence is a database object that generates unique numbers, mostly used for primary key values.
В Oracle для поля нет атрибута AUTO_INCREMENT как в MySQL.
Вместо этого используются последовательности.
Посмотреть список последовательностей, которые есть в схеме
select * from user_sequences;
Создать/модифицировать/удалить последовательность
Можно более детально указать параметры
Посмотреть значение последовательности
Важно!
Каждый запрос select t_seq.nextval from dual увеличивает последовательность на величину инкремента
Сразу после создания последовательность не имеет никакого значения,
если сделать, то получим ошибку:
Необходимо сначала сделать
Увеличить текущее значение последовательности
Если нужно увеличить значение последоватести скажем на 10000, то можно
сделать это несколькими методами
1. Процедурой:
Процедура
2. Запросом:
A sequence is a database object that generates unique numbers, mostly used for primary key values.
В Oracle для поля нет атрибута AUTO_INCREMENT как в MySQL.
Вместо этого используются последовательности.
Посмотреть список последовательностей, которые есть в схеме
select * from user_sequences;
Создать/модифицировать/удалить последовательность
create sequence t_seq;
создаётся последовательность с параметрами по-умолчанию(начинается с 1 инкремент на 1)
alter sequence t_seq increment by 2;
drop sequence t_seq;
alter sequence t_seq increment by 2;
drop sequence t_seq;
Можно более детально указать параметры
CREATE SEQUENCE my_sequence
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
Посмотреть значение последовательности
select t_seq.nextval from dual; // следующее
select t_seq.currval from dual; // текущее
select t_seq.currval from dual; // текущее
Важно!
Каждый запрос select t_seq.nextval from dual увеличивает последовательность на величину инкремента
Сразу после создания последовательность не имеет никакого значения,
если сделать, то получим ошибку:
select t_seq.currval from dual;
ORA-08002: sequence T_SEQ.CURRVAL is not yet defined in this session
Необходимо сначала сделать
select t_seq.nextval from dual;
и тогда
select t_seq.currval from dual;
вернёт 1
Увеличить текущее значение последовательности
Если нужно увеличить значение последоватести скажем на 10000, то можно
сделать это несколькими методами
1. Процедурой:
sql>select T_SEQ.currval from dual;
CURRVAL
----------
140000
CURRVAL
----------
140000
Процедура
declare
CurrValue integer;
begin
loop
select T_SEQ.currval into CurrValue from dual;
exit when CurrValue >= 150000;
select T_SEQ.nextval into CurrValue from dual;
end loop;
end;
CurrValue integer;
begin
loop
select T_SEQ.currval into CurrValue from dual;
exit when CurrValue >= 150000;
select T_SEQ.nextval into CurrValue from dual;
end loop;
end;
2. Запросом:
SQL> ALTER SEQUENCE t_seq1 INCREMENT BY 10000;
SQL> SELECT t_seq1.nextval FROM dual;
SQL> ALTER SEQUENCE t_seq1 INCREMENT BY 1;
SQL> SELECT t_seq1.nextval FROM dual;
SQL> ALTER SEQUENCE t_seq1 INCREMENT BY 1;