As sequências
ou “sequences” são objetos do banco de dados
onde vários usuários podem gerar números inteiros únicos. As gerações
dos números sequenciais ajudam na geração das chaves primárias.
Sem as sequências, os valores sequenciais só podem ser produzidos
através de uma programação. Um novo
valor de chave primária pode ser obtido
selecionando uma sequência, que uma vez fornecido ao usuário,
incrementa seu valor automaticamente.
Neste artigo vamos apresentar
como alterar valores de uma sequência sem a necessadade de recriá-la. Em
versões anteriores do Oracle para reinicializar uma sequência era necessário
recriá-la.
A seguir vamos demonstrar os
passos:
Criando uma sequência usaremos
o comando abaixo.
SQL>
CREATE SEQUENCE SEQ_TEST
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
Sequence created.
Para ver o valor atual da sequência utilizamos os
comandos abaixo:
SQL> SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
SQL> SELECT SEQ_TEST.CURRVAL FROM DUAL;
CURRVAL
----------
1
Em seguida, para incrementar valores na sequência
executaremos os comandos abaixo:
SQL>
SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
2
SQL>
SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
3
SQL>
SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
4
SQL>
SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
5
SQL> SELECT SEQ_TEST.CURRVAL
FROM DUAL;
CURRVAL
----------
5
Neste exemplo geramos 5 incrementos para a
sequência.
Para reinicializar a sequência, deve-se utilizar o
comando “alter sequence” com a opção "increment by", adicionando o
valor que se deseja inicializar ou mesmo diminuir, conforme o exemplo abaixo:
SQL> ALTER SEQUENCE SEQ_TEST INCREMENT BY -5 MINVALUE 0;
Sequence altered.
O comando acima irá zerar a
sequência, pois a mesma possuía 5 valores e no comando é subtraído 5, conforme resultado demonstrado abaixo.
SQL> SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
0
SQL> SELECT SEQ_TEST.CURRVAL FROM DUAL;
CURRVAL
----------
0
Também é possível incrementar
valores, substituindo pelo valor desejado, conforme apresentado abaixo:
SQL> ALTER SEQUENCE SEQ_TEST INCREMENT BY 3 MINVALUE 0;
Sequence altered.
SQL> SELECT SEQ_TEST.NEXTVAL FROM DUAL;
NEXTVAL
----------
3
SQL> SELECT SEQ_TEST.CURRVAL FROM DUAL;
CURRVAL
----------
3
Referências: Oracle®
Database SQL Language Reference 11gR2 (11.2)
Oracle® Database Administrator´s
Guide 11gR2 (11.2)
MSc.
Rubens Oliveira
DBA Oracle Consultor