Se você já usou o SQL Server, deve conhecer a propriedade Identity. Com esta propriedade um campo do tipo Int, é incrementado automaticamente. E no oracle como criamos um campo que é incrementado automaticamente? Para isso temos o objeto Sequence.

Você já deve ter entendido o que é uma Sequence, mas vamos usar uma definição mais formal…

Sequences são objetos que geram números sequenciais dentro do Oracle. São excelentes em termos de performance já que armazenam um range de números no cache e também porque tiram do desenvolvedor a responsabilidade de gerenciar a geração de Ids em casos de multiplos acessos. As sequences são objetos muito úteis para o desenvolvedor (como eu já disse…) pois são muito performáticos.

Criando uma Sequence

Para criar uma sequence usamos a sintaxe abaixo.


CREATE SEQUENCE sqTeste
    MINVALUE 1
    MAXVALUE 300
    START WITH 1
    INCREMENT BY 1
    CACHE 20;

O comando acima cria um objeto do tipo Sequence, chamado sqTeste, possui o valor mínimo de 1, e pode chegar ao valor máximo de 300, esta sequence inicia com o valor 1, é incrementada de 1 em 1 e armazena no cache um range de 20 números.

Simples não? Vamos detalhar cada uma das opções que podemos usar na criação de uma Sequence:

  • INCREMENT BY: Informa ao sistema como incrementar a sequence, pode receber valores positivos e negatives. Se o valor informado for positivo a sequence será ascendente, se o valor for negativo a sequence será decrescente.
  • START WITH: Informa ao sistema o valor inteiro com o qual a sequence iniciará.
  • MINVALUE: Informa ao sistema o menor valor que uma sequence pode ter. Normalmente o valor desta propriedade é o mesmo valor da propriedade Start With.
  • MAXVALUE: Informa ao sistema o maior valor que uma sequence pode assumir.
  • CACHE: Especifica o número de valores da sequence que ficarão armazenados. Ou seja, só haverá processamento para a recuperação de valores, quando o range de valores armazenados no cache acabar.

Agora que você já sabe como criar um sequence, vamos ver o que eu considero o seu principal uso, fazer um Insert em uma tabela que possui um campo numérico como chave primária.


INSERT INTO TBLCLIENTE
 (ID, NOME)
 VALUES
 (sqTeste.nextval, 'Adonirandina')

O NextVal retorna o próximo valor livre da sequence.

Para verificar qual o valor atual da sequence você pode usar o seguinte comando:select sqTeste.currval from dual

Conclusão

Vimos neste artigo que as sequences são excelentes recursos, para a geração de identificadores únicos. Use-as sempre que for preciso!