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:
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.
Existe algum comando dentro da Sequence para que possa associar o auto incremento a uma coluna específica da tabela?
Boa noite João, tudo bem?
Procurando no Stack Overflow, achei algo interessante, é possível criar uma trigger, e dessa forma selecionar o nextval no seu insert, fazendo assim uma sequence de auto incremento.
Link de referência:
http://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle
Um grande abraço.