Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2023

Banco de DadosSQL
Código
qg027189
Banca
Quadrix
Órgão
CREFITO-7ª Região(BA e SE)
Ano
2023
Nível
Superior
Cargo
Programador(a)
No que se refere ao modelo entidade-relacionamento (MER) e à linguagem SQL, julgue o item.O comando select * from fisioterapeuta where rownum > 10; não funciona no Oracle, uma vez que o campo reservado (rownum) somente pode ser usado nas operações de atualização (update).
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

ROWNUM no Oracle: comportamento e uso em consultas

Gabarito: ERRADO (alternativa E). O comando select * from fisioterapeuta where rownum > 10; funciona no Oracle — a sintaxe é válida e o comando é executado, apenas retornando nenhuma linha, pois o ROWNUM é uma pseudocoluna atribuída sequencialmente a cada linha do resultado antes da avaliação da condição WHERE. A afirmação de que o ROWNUM só pode ser usado em operações de atualização (UPDATE) é falsa: ele é amplamente utilizado em consultas SELECT para limitar o número de linhas retornadas (ex.: WHERE ROWNUM <= 10).

O ROWNUM é uma pseudocoluna exclusiva do Oracle, atribuída a cada linha do resultado no momento em que a linha é selecionada, antes da aplicação das cláusulas ORDER BY e GROUP BY. Isso significa que, para cada linha candidata, o Oracle atribui um número sequencial (1, 2, 3, ...) e só então avalia a condição do WHERE. Se a condição for falsa para a linha atual, ela é descartada e o número não é reutilizado — o próximo número vai para a próxima linha candidata. Por isso, WHERE ROWNUM > 10 nunca retorna linhas: para a primeira linha, ROWNUM = 1, que não é maior que 10, então ela é descartada; a segunda linha recebe ROWNUM = 2, também não é maior que 10, e assim por diante — nenhuma linha jamais recebe um ROWNUM maior que 10, pois todas são descartadas antes de chegar a esse valor.

Na prática, o ROWNUM é usado principalmente para limitar o número de linhas retornadas em uma consulta, como em SELECT * FROM tabela WHERE ROWNUM <= 10 (que retorna as 10 primeiras linhas). Também é comum em combinação com ORDER BY para obter os "N primeiros" registros, embora seja necessário usar uma subconsulta para ordenar primeiro e depois aplicar o ROWNUM. A pseudocoluna pode ser usada em qualquer comando SQL que aceite uma condição WHERE, incluindo SELECT, UPDATE e DELETE — não há restrição que a limite a operações de atualização.

A pegadinha da questão está em afirmar que o comando "não funciona" — na verdade, ele funciona (é executado sem erro de sintaxe), mas retorna um conjunto vazio. O candidato que conhece o comportamento do ROWNUM sabe que a condição > 10 é logicamente impossível de ser satisfeita, mas isso não torna o comando inválido. A banca explora a confusão entre "não retorna resultados" e "não funciona" — são coisas distintas.

NÃO CAIA NESSA!

A banca troca o conceito de "comando inválido" por "comando que não retorna linhas". O SELECT ... WHERE ROWNUM > 10 é sintaticamente válido e executa normalmente, apenas devolve zero linhas. O erro do candidato é achar que a pseudocoluna só vale para UPDATE — na verdade, ela é usada justamente em SELECT para limitar resultados (WHERE ROWNUM <= N).

  1. 1Linha candidata selecionada
  2. 2ROWNUM atribuído (1, 2, 3...)
  3. 3WHERE avaliado
  4. 4Falso → linha descartada
  5. 5Número não é reutilizado
LEVEL · soulevel.com.br

Item — ❌ ERRADO

A afirmação contém dois erros: (1) o comando funciona no Oracle — é executado sem erro, apenas retorna nenhuma linha; (2) o ROWNUM não é restrito a operações de UPDATE — ele é uma pseudocoluna utilizável em qualquer comando com WHERE, especialmente em SELECT para limitar o número de linhas. O comportamento correto é: ROWNUM é atribuído sequencialmente antes da avaliação do WHERE, então ROWNUM > 10 nunca é verdadeiro para nenhuma linha, resultando em conjunto vazio — mas o comando é perfeitamente válido.

Gabarito: ERRADO (alternativa E).

Link permanente: /questoes/qg027189