Num ambiente Oracle, considere os seguintes comandos: create sequence xpto; select xpto.nextval from dual d1, dual d2, dual d3; select xpto.currval from dual; Assinale o valor exibido pelo último comando.
- A)0
Errada: 0 não é o valor padrão de uma sequence Oracle recém-criada, que normalmente inicia em 1.
- B)1
Errada: 1 seria o primeiro valor gerado pela sequence, mas não o último após três chamadas de NEXTVAL.
- C)2
Errada: 2 é um valor intermediário, não o valor final armazenado para o CURRVAL após a consulta anterior.
- D)3
Certa: o NEXTVAL foi acionado três vezes e o CURRVAL devolve o último valor gerado na sessão, que é 3.
- E)NULL
Errada: NULL só ocorreria se ainda não tivesse havido chamada anterior de NEXTVAL na sessão.
Gabarito: B
Em Oracle, sequence é um objeto que gera números em ordem. O ponto-chave aqui é simples: o comando NEXTVAL avança a sequência e devolve o próximo valor, enquanto CURRVAL mostra o valor mais recente já gerado naquela sessão. Ou seja, CURRVAL não cria número novo, só “repete” o último que a sessão conseguiu obter com NEXTVAL. No enunciado, a sequência foi criada e depois houve um SELECT com xpto.nextval usando três linhas vindas de dual: d1, d2 e d3. Isso faz o NEXTVAL ser avaliado três vezes, gerando três números consecutivos. Em uma sequência recém-criada no Oracle, o valor inicial padrão é 1, então as chamadas retornam 1, 2 e 3. Depois disso, o comando `select xpto.currval from dual;` apenas consulta o último valor gerado na sessão. Como o último NEXTVAL foi 3, o CURRVAL também será 3. É exatamente essa a lógica que a FGV gosta de cobrar: NEXTVAL anda, CURRVAL olha no retrovisor. Se você lembrar da regra de ouro, não erra: CURRVAL só funciona depois de algum NEXTVAL na mesma sessão, e sempre mostra o último valor obtido. Aqui, portanto, o valor exibido no último comando é 3.