Analise as seguintes afirmativas sobre SEQUENCES no Oracle: ...
1. Os valores gerados por uma sequence podem ser cíclicos, isto é, retornam ao valor inicial ao atingirem certo limite.
2. Se for gerado um valor para uma transação que é posteriormente abortada (roll back) o mesmo valor pode ser gerado para outra transação.
3. Um mesmo usuário recebe sempre valores contínuos na ordem estabelecida para a sequence, mesmo quando há outros usuários gerando valores com a mesma sequence.
4. A função utilizada para gerar valores de uma sequence é denominada IDENTITY.
Somente está correto o que se afirma em:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a A - 1. Vamos explorar o motivo pelo qual essa afirmação é verdadeira e discorrer brevemente sobre as outras.
Afirmação 1: É verdadeira porque o Oracle permite a criação de sequences que são cíclicas. Isso significa que, após atingirem um valor máximo ou mínimo, elas podem ser configuradas para reiniciar do valor inicial (START WITH) definido, garantindo a geração contínua de valores únicos sem intervenção manual.
Para as demais afirmações, vejamos o que está incorreto:
- Afirmação 2: Um valor gerado por uma sequence e não utilizado devido a um rollback não será reutilizado. As sequences são desenhadas para evitar duplicidade, portanto, elas não geram o mesmo número novamente mesmo após um rollback. Isso evita possíveis conflitos de chave primária ou única em tabelas.
- Afirmação 3: Não é garantido que um usuário sempre receberá valores contínuos de uma sequence. Devido ao mecanismo de cache e ao uso simultâneo de várias sessões ou transações, podem ocorrer lacunas entre os valores gerados por uma sequence. Isso é particularmente comum em ambientes com alto grau de concorrência.
- Afirmação 4: A função para gerar valores de uma sequence no Oracle é chamada NEXTVAL, não IDENTITY. A palavra-chave IDENTITY é comumente associada a colunas que autoincrementam em Sistemas de Gerenciamento de Banco de Dados (SGBDs) como SQL Server e não é aplicável em Oracle da mesma maneira.
Portanto, somente a primeira afirmação está correta, o que reafirma nossa escolha pela alternativa A - 1.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
1 - Se criar uma sequência com "CYCLE", o valor é reiniciado
2 - A sequência não será decrementada caso a transação passe por rollback
3 - A sequência é global e não do usuário, então esse usuário pode não receber números contínuos
4 - Para gerar um novo valor da sequência, usa-se: nome_seq.nextval
.
OBS: No Oracle 12c, pode-se criar um IDENTITY destas três formas:
- GENERATED BY DEFAULT AS IDENTITY
- GENERATED ALWAYS AS IDENTITY
- GENERATED BY DEFAULT ON NULL AS IDENTITY
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo