Sequences

Todos nós já sabemos que as constraints PK nunca devem se repetir, assim como a UNIQUE. Geralmente o tipo de dados das colunas PK são numéricos. Então talvez estejam se perguntando como gerar esses números que nunca se repetem para popular essas colunas. A resposta da Oracle é no uso de sequences. Esse objeto gera números em sequencias seguido regras que podemos estabelecer e de uma maneira muito simples. Primeiro vamos ver como criar uma sequência:

CREATE SEQUENCE seq_pessoa_id;

Claro que essa é a maneira mais simples, mas muito utilizada de criar uma sequence. Omitimos algumas opções, e que no caso foi configurado com valores padrões. Depois do nome da sequência que nesse exemplo foi seq_pessoa_id, podemos colocar várias opções separadas por espaços. Vejamos quais são.

INCREMENTED BY X – Ao invés de ser incrementado por 1, será incrementado por X, se for um número negativo a sequência será negativa.

STARTS WITH X – Ao invés de começar em 1, será iniciado por X.

MAXVALUE X – O máximo número da sequência será X, se não especificarmos será assumido NOMAXVALUE.

NOMAXVALUE – Especifica que não existe um valor máximo na sequência.

MINVALUE X – O valor mínimo da sequencia, se não for especificado, é assumindo o NOMINVALUE, isso se não estivermos usando CYCLE, se estivermos o valor mínimo padrão é 1.

NOMINVALUE – Especifica que não existe um valor mínimo na sequência.

CYCLE – Quando a sequência crescente chegar no valor máximo o próximo valor será o mínimo, se for decrescente é ao contrário.

NOCYCLE – Ao chegar no valor máximo, a sequência não irá gerar mais números, claro que se não existir um valor máximo o NOCYCLE não terá nenhum efeito.

Vejamos agora como utilizar uma sequence.

Temos dois possíveis comandos para uma sequence depois de criada. A NEXTVAL e o CURRVAL. NEXTVAL avança a sequência e retorna o valor. O CURRVAL mostra o valor atual da sequência, muito bom para se usar nas colunas FK. Devemos lembrar que para utilizar o CURRVAL é necessário ter utilizado pelo menos uma vez o NEXTVAL, senão será lançado um erro. Ambos são mais utilizados para gerar os valores no INSERT, veja um exemplo:

INSERT INTO pessoas(pessoa_id, nome) VALUES(pessoas_pessoa_id.NEXTVAL, "teste");

Nesse caso, o valor de pessoa_id, será populado com o valor gerado pela sequêcia. Agora o que pode acontecer caso sera gerado um erro no INSERT como no exemplo abaixo?

INSERT INTO pessoas(pessoa_id, nascimento) VALUES(pessoas_pessoa_id.NEXTVAL, "teste");

A coluna nascimento é do tipo DATE, mas adicionamos um VARCHAR2 sem possibilidade de auto conversão, nesse caso nada seria inserido na tabela e seria gerado um erro. Mas acontece que mesmo assim a sequência iria avançar sem possibilidade de voltar, então estejam atentos a isto, pois poderá ter furos na sequência de uma coluna.

Podemos utilizar a sequência em praticamente qualquer lugar que poderíamos utilizar alguma função, mas não em todos. Esteja atentos aos lugares em que não podemos utilizar uma sequence. Que são:

  • Na cláusula DEFAULT
  • CREATE TABLE ou ALTER TABLE
  • Em subquerys de CREATE VIEW, SELECT, DELETE e UPDATE
  • DISTINCT em um SELECT
  • WHERE
  • Na cláusula CHECK
  • UNION, MINUS e INTERSECT
  • Anúncios

    Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

    Marcado com: , ,
    Publicado em Sem categoria

    Deixe um comentário

    Preencha os seus dados abaixo ou clique em um ícone para log in:

    Logotipo do WordPress.com

    Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

    Foto do Google

    Você está comentando utilizando sua conta Google. Sair /  Alterar )

    Imagem do Twitter

    Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

    Foto do Facebook

    Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

    Conectando a %s

    Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

    Esse Blog é reconhecido pela
    Certificações
    Sou articulista

    Clique para seguir este blog e receber notificações via email de novos posts.

    Tércio Costa

    Tércio Costa

    Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

    Links Pessoais

    Serviços verificados

    Visualizar Perfil Completo →

    Total de Visualizações da Página
    • 138.077 Visualizações
    %d blogueiros gostam disto: