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.