Sequence no Oracle

Criando auto-incremento

Por Ricardo Esteves Kneipp e Rodney Cezar de Albuquerque

Neste artigo será apresentado a utilização do comando sequence.

Sequences

Quando uma aplicação necessita utilizar valores numéricos seqüenciais em uma tabela faz-se o uso de sequence. Esses valores são gerados automaticamente pelo oracle. A sintaxe do sequence é mostrada na Listagem 1.

 

Create sequence nome_da_seqüência

[increment by n]

[start with n]

[maxvalue n | nomaxvalue] or [minvalue n | nominvalue]

[cycle | nocycle]

[cache n | nocache];

Listagem 1. Sintaxe de criação de sequence.

A Tabela 1 descreve cada opção.

 

Opção

Descrição

nome_da_seqüência

Nome da sequencia, não podendo ser o mesmo de uma tabela ou view

Increment by n

Especifica de quanto será o incremento ou decremento. O padrão é 1

Start with n

Especifica o primeiro número a ser gerado. O padrão é 1.

Maxvalue n

Especifica o valor máximo que a seqüência gerada pode atingir. O padrão é nomaxvalue, indo até 1027

Minvalue n

Especifica o valor mínimo para as seqüências que estiverem sendo decrementadas. É mutuamente exclusiva ao maxvalue.

Cycle | nocycle

Indica que ao atingir o valor máximo a numeração continuará a partir do valor inicial. O default é nocycle.

Cache n | nocache

Especifica quantos valores o Oracle pré-aloca e mantém em memória. O padrão é 20.

Tabela 1. Descrição das opções de criação de sequence.

Criando uma sequence

A Listagem 2 mostra um exemplo de criação de sequence

create sequence idcodcli

increment by 1

start with 10

maxvalue 999

nocycle;

Listagem 2. Exemplo de criação de sequence.

Confirmando a existência de uma sequence

A Figura 1 mostra como confirmar a existência de uma sequence

 RicardoRodney_Sequences_Fig01.png

Figura 1. Select em User_sequences.

Duas pseudocolunas são utilizadas nas sequences: nextval e currval.

Usando o nextval

O nextval retorna o próximo número da seqüência.

A Figura 2 mostra a utilização da pseudocoluna nextval.

 RicardoRodney_Sequences_Fig02.png

Figura 2. insert utilizando o nextval.

 Usando o currval

O Currval retorna o valor corrente conforme apresentado na Figura 3.

RicardoRodney_Sequences_Fig03.png
Figura 3. uso do currval

Para eliminar uma sequence utilizaremos o comando drop.

A Listagem 3 mostra um exemplo da utilização do comando.

drop sequence idcodcli;

Listagem 3. Eliminando uma sequence.

Visualizando a descrição da sequence

Para visualizar a descrição da sequence utilize o comando mostrado na Figura 4.

 RicardoRodney_Sequences_Fig04.png

Figura 4. Descrição detalhada do sequence.

Conclusões

Um sequence apresenta vantagens e desvantagens, conforme abaixo descrito.

Vantagens:

·         Pode-se utilizar apenas uma sequence para várias tabelas do banco.

·         O sequence ajuda na organização dos registros.

 

Desvantagens

·         Caso haja uma falha no sistema será perdida toda a numeração seqüencial.

·         Caso você execute o comando DELETE na sua tabela, o número da sequencia que você deletou será perdido, permanecendo um "burraco" na sua coluna.

 

 Noticia_RicardoRodney.gif

(1) Prof. Ricardo E. Kneipp (ricardo.kneipp@gmail.com) é autor de 3 obras na área de informática, inclusive em banco de dados. É graduado em Ciência da Computação-UCP, pós-graduado em Informática na Educação-UFLA e em Gestão Estratégica-UCAM. Realizou curso de certificação Oracle e é Mestrando em Educação-UNIPLI. É Analista de Sistemas e Professor das Universidades UNIG e FAMINAS, nos cursos de graduação e pós-graduação em Biologia, Engenharia da Computação, Sistemas de Informação, Tecnologia de Processamento de Dados e Ciência da Computação. Ministra as Disciplinas: Bioestatística, Banco de Dados, Linguagens de Programação, Projeto Final, Compiladores e Gerenciamento Eletrônico. É membro da SBC (Sociedade Brasileira de Computação).

 

(2) Prof. Rodney C. de Albuquerque (rodney_albuquerque@hotmail.com) é autor de 3 obras na área de informática, inclusive em banco de dados. É graduado em Tecnologia de Processamento de Dados-UVA, pós-graduado em Redes Locais-UNESA e em Marketing-UCAM. Realizou cursos de certificação Microsoft e é Mestrando em Educação-UNIPLI. É Analista de Sistemas e Professor da Universidade-UNIG nos cursos de graduação e pós-graduação em Enfermagem, Fisioterapia, Educação Física, Engenharia da Computação, Sistemas de Informação, Tecnologia de Processamento de Dados e Ciência da Computação. Ministra as Disciplinas: Informática Aplicada, Bioestatística, Metodologia, Banco de Dados, Linguagens de Programação, Projeto Final, Redes de Computadores, Segurança e Auditoria de Sistemas. É membro da SBC (Sociedade Brasileira de Computação).