Oracle/PLSQL: SEQUENCE (Gerar números de forma automática)
Em Oracle, é possível gerar de forma automática uma sequência de números, usando o comando
SEQUENCE. O SEQUENCE é um objecto do Oracle usado para gerar uma sequência de números. Isto
pode ser bastante útil quando se pretende criar um número único para a chave primária.
A sintaxe é a seguinte:
CREATE SEQUENCE nome_sequencia
MINVALUE valor
MAXVALUE valor
START WITH valor
INCREMENT BY valor
CACHE valor;
Por exemplo:
CREATE SEQUENCE cod_produto
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
Criará um objecto sequence denominado cod_produto. O primeiro número da sequência é o 1 e cada
número seguinte será incrementado uma unidade (i. e, 2,3,4,...). Reserva 20 valores.
Se for omitido o MAXVALUE, o valor por defeito será sempre:
MAXVALUE 999999999999999999999999999
Assim pode-se simplesmente especificar o comando CREATE SEQUENCE omitindo o MAXVALUE:
CREATE SEQUENCE cod_produto
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Para recuperar o valor da sequência é necessário usar nextval.
Por exemplo:
Cod_produto.nextval
Recuperará o próximo valor de cod_produto. O nextval precisa ser usado num commando SQL . Por
exemplo:
INSERT INTO produtos
(id_produto, nome_produto)
VALUES
(cod_produto.nextval, 'Super Bock');
Este insert introduzirá um novo registo na tabela produtos. O campo cod_produto tomará o próximo
número da sequência cod_produto . O campo nome_produto tomará o valor Super Bock.
FAQs
Questões frequentes sobre SEQUENCE:
Questão 1: Quando se cria uma sequence, qual o significado das opções cache e nocache ? Por
exemplo, pode-se criar uma sequence com uma cache de 20:
CREATE SEQUENCE cod_produto
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Ou pode-se criar a mesma sequence com a opção nocache:
CREATE SEQUENCE cod_produto
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;
Resposta: Relativamente à sequence, a opção cache especifica quantos valores da sequência serão
guardados em memória para mais rápido acesso.
Assim, em caso de falha do sistema, criar uma sequence com a opção cache, significa que todos os
valores guardados em memória que não foram usados serão perdidos. Isto implicará uma lacuna na
sequência de valores atribuídos. Quando o sistema reiniciar, o Oracle guardará novos valores nos seus
lugares, ignorando os perdidos.
Nota: Para recuperar os valores perdidos, poder-se-á executar o comando ALTER SEQUENCE para
reiniciar o contador no valor corrente.
Nocache significa que nenhum valor da sequência será guardado em memória. Esta opção pode
comprometer o desempenho.
Questão 2: Como alterar o valor de LASTVALUE no Sequence?
Resposta: Pode-se alterar o LASTVALUE executando o comando ALTER SEQUENCE.
Por exemplo, se o ultimo valor usado pelo Oracle for 100 e pretendermos para directamente para o 225
devemos executar os seguintes comandos.
alter sequence nome_sequencia
increment by 124;
select nome_sequencia.nextval from dual;
alter sequence nome_sequencia
increment by 1;
O próximo valor usado pela sequência será então o 225.
Download

PLSQL- Autonumber: PDF