Criando Sequences no Oracle

Olá Pessoal…

Hoje irei falar do recurso de Sequences no Oracle (qual a funcionalidade, recursos e como criar). Ou seja, como criar o recurso de auto-incremento no Oracle.


Em bases Oracle, para se fazer campos sequencias qual seria a melhor forma?

Utilizar um recurso chamado Sequence, onde é possível manipular o valor corrente e pegar o próximo valor, e a cada vez que o próximo valor é usado, ele se torna o valor corrente, e um próximo fica disponível.

Por exemplo, o valor corrente é 1, se pegar o próximo valor, o valor corrente se torna 2, se pegar novamente o próximo valor, o valor corrente se torna 3, e assim por diante, conforme a imagem abaixo:

Representação de Sequence

Representação de Sequence

No exemplo acima notamos como a Sequence é utilizado, para valores obsoletos, não é possível manipular mais seu conteúdo (1), já o valor corrente pode ser utilizado ainda (2), mas quando se usa o próximo valor (3), ele se torna o valor corrente.

Para criar uma Sequence, basta utilizar o seguinte script:

CREATE SEQUENCE NOME_SEQ
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 999
  MINVALUE 1
  NOCACHE
  NOCYCLE;

Onde:

START WITH Valor que inicia a sequence, nosso exemplo foi 1
INCREMENT BY Qual será o incrementando, no nosso caso, de 1 em 1
MAXVALUE Valor máximo que pode ser atingido pela sequence
MINVALUE Valor mínimo que pode ser usado na sequence
NOCACHE / CACHE N Especifica o quanto de cache o Oracle pré-aloca
NOCYCLE / CYCLE Indica se ao chegar ao máximo, a sequence retorna ao início

Para excluir uma Sequence, é mais simples ainda, basta usar um drop:

DROP SEQUENCE NOME_SEQ;

Para pegar o próximo valor, utilizamos a função NEXTVAL(), conforme exemplo(s) abaixo:

SELECT NOME_SEQ.NEXTVAL() FROM DUAL;
INSERT INTO TABELA VALUES (NOME_SEQ.NEXTVAL());

Para pegar o valor corrente, utilizamos a função CURRVAL(), conforme exemplo(s) abaixo:

SELECT NOME_SEQ.CURRVAL() FROM DUAL;
INSERT INTO TABELA VALUES (NOME_SEQ.CURRVAL());

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. joao disse:

    Existe algum comando dentro da Sequence para que possa associar o auto incremento a uma coluna específica da tabela?

Deixe uma resposta

Terminal de Informação