segunda-feira, 16 de dezembro de 2013

Alterando valores de uma sequência


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