Questão de Banco de Dados — Oracle — CESPE / CEBRASPE 2024
Banco de Dados›Oracle
Código
ce176578
Banca
CESPE / CEBRASPE
Órgão
MPE-GO
Ano
2024
Nível
Superior
Cargo
Analista em Informática
Considerando 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%'
CCerto
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.
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.