Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — CESPE / CEBRASPE 2024

Banco de DadosOracle
Código
ce176578
Banca
CESPE / CEBRASPE
Órgão
MPE-GO
Ano
2024
Nível
Superior
Cargo
Analista em Informática
Imagem associada para resolução da questãoConsiderando a tabela precedente, que representa um banco de dados relacional ORACLE, julgue o próximo item.O select a seguir retornará o valor 70.select max(cod_carreira)FROM eg.EGT_CARREIRA ecWHERE DES_CARREIRA LIKE 'a%'
  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”.

Consulta SQL com LIKE e MAX no Oracle

Gabarito: Errado (E). A consulta SELECT MAX(COD_CARREIRA) FROM EG.EGT_CARREIRA EC WHERE DES_CARREIRA LIKE 'a%' não retornará o valor 70, pois o filtro LIKE 'a%' é sensível a maiúsculas e minúsculas no Oracle, e a tabela provavelmente contém valores como 'Analista' (com 'A' maiúsculo), que não correspondem ao padrão 'a%' (com 'a' minúsculo). Portanto, a consulta retornará NULL, não 70.

A questão envolve o comportamento do operador LIKE no Oracle, que por padrão é case-sensitive. Isso significa que LIKE 'a%' corresponde apenas a strings que começam com a letra 'a' minúscula. Se os dados na coluna DES_CARREIRA começam com letra maiúscula (como 'Analista', 'Advogado', etc.), eles não serão selecionados. Como resultado, a função MAX aplicada a um conjunto vazio de linhas retorna NULL.

Para entender melhor, considere o seguinte exemplo: se a tabela EG.EGT_CARREIRA tiver os seguintes dados:

COD_CARREIRA

DES_CARREIRA

10

Analista

20

Advogado

30

Assistente

40

Auditor

50

Contador

60

Economista

70

Engenheiro

A consulta WHERE DES_CARREIRA LIKE 'a%' procurará por descrições que comecem com 'a' minúsculo. Nenhuma das descrições acima começa com 'a' minúsculo (todas começam com maiúscula), então o conjunto de linhas filtrado é vazio. A função MAX(COD_CARREIRA) sobre um conjunto vazio retorna NULL, não 70.

Se a intenção fosse ignorar maiúsculas e minúsculas, seria necessário usar funções como LOWER(DES_CARREIRA) LIKE 'a%' ou UPPER(DES_CARREIRA) LIKE 'A%', ou configurar a sessão para case-insensitive. Mas, como a consulta está escrita, ela é case-sensitive.

A pegadinha aqui é que muitos candidatos assumem que LIKE é case-insensitive por padrão, mas no Oracle não é. Além disso, a presença do valor 70 na tabela pode levar o candidato a pensar que a consulta retornará esse valor, sem considerar o filtro.

1Case-sensitive por padrão
'a%' ≠ 'Analista'
'A%' ≠ 'analista'
2Conjunto vazio
MAX retorna NULL
3Soluções
LOWER(coluna) LIKE 'a%'
UPPER(coluna) LIKE 'A%'
LIKE no Oracle
LEVELsoulevel.com.br
LIKE no Oracle: Case-sensitive por padrão ('a%' ≠ 'Analista', 'A%' ≠ 'analista'); Conjunto vazio (MAX retorna NULL); Soluções (LOWER(coluna) LIKE 'a%', UPPER(coluna) LIKE 'A%')

Item — ❌ Errado

A afirmação de que a consulta retornará o valor 70 está incorreta. O filtro LIKE 'a%' é case-sensitive no Oracle, e se os dados em DES_CARREIRA começam com letra maiúscula, nenhuma linha será selecionada. A função MAX sobre um conjunto vazio retorna NULL, não 70. Para que a consulta retorne 70, seria necessário que houvesse uma linha com DES_CARREIRA começando com 'a' minúsculo e COD_CARREIRA igual a 70, o que não é o caso.

Gabarito: Errado (E).

Link permanente: /questoes/ce176578