Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — FCC 2025

Banco de DadosOracle
Código
fc075044
Banca
FCC
Órgão
TRT - 1ª REGIÃO (RJ)
Ano
2025
Nível
Superior
Cargo
Analista Judiciário - Área Apoio Especializado Especialidade Tecnologia da Informação
Considere o seguinte trecho de código em PL/SQL:Imagem associada para resolução da questãoAo ser executado em condições ideais, este comando
  1. Aerra ao calcular o tempo de serviço, pois deveria ter sido usado EXTRACT (YEAR FROM SYSDATE) - EXTRACT (YEAR FROM dat-admissao), uma vez que EXTRACT já retorna a diferença correta de anos e meses.
  2. Berra ao calcular o tempo de serviço, pois deveria ter sido usado DATEDIFF (YEAR, data_admissao, SYSDATE), que retorna diretamente os anos completos.
  3. Ccalcula o tempo de serviço dos funcionários ativos somando diretamente os meses obtidos pela função MONTHS-BETWEEN, sem necessidade de divisão ou modulação.
  4. Dcalcula o tempo de serviço dos funcionários ativos, obtendo a diferença total de meses entre a data atual SYSDATE e data-admissao, convertendo os valores em anos e meses utilizando FLOOR E MOD.
  5. Eerra ao calcular o tempo de serviço, pois deveria ter sido utilizado apenas ROUND (MONTHS-BETWEEN (SYSDATE, data-admissao) / 12), pois não há necessidade de calcular separadamente os anos e meses.
Revelar gabarito e comentário

GabaritoD — calcula o tempo de serviço dos funcionários ativos, obtendo a diferença total de meses entre a data atual SYSDATE e data-admissao, convertendo os valores em anos e meses utilizando FLOOR E MOD.

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”.

Funções de Data no Oracle SQL

Gabarito: letra D. O comando utiliza a função MONTHS_BETWEEN para calcular a diferença total de meses entre a data atual (SYSDATE) e a data de admissão, aplicando em seguida as funções FLOOR (para obter o quociente inteiro de anos) e MOD (para obter o resto da divisão, representando os meses remanescentes).

O código apresentado realiza uma decomposição aritmética do tempo de serviço. A função MONTHS_BETWEEN(data1, data2) retorna o número de meses entre duas datas. Ao dividir esse resultado por 12 e aplicar FLOOR, isolamos a quantidade de anos completos. O operador MOD(resultado, 12) extrai a parte fracionária do tempo (os meses que não completaram um ano), permitindo uma exibição legível do tempo de serviço em formato "anos e meses".

Alternativa A — ❌ Incorreta

O uso de EXTRACT para calcular tempo de serviço é inadequado, pois essa função extrai apenas componentes isolados de uma data (como o ano ou mês de uma data específica), não calculando a diferença entre duas datas distintas. A subtração simples de anos não considera os meses e dias transcorridos, gerando um cálculo impreciso.

Alternativa B — ❌ Incorreta

A função DATEDIFF não é uma função nativa do Oracle SQL (é comum em outros SGBDs como SQL Server ou MySQL). No Oracle, o cálculo de diferença entre datas é feito subtraindo-se as datas (retornando dias) ou utilizando MONTHS_BETWEEN.

Alternativa C — ❌ Incorreta

A soma direta dos meses obtidos por MONTHS_BETWEEN sem a divisão por 12 e o uso de MOD não resultaria na separação entre anos e meses, mas apenas em um valor total acumulado de meses, o que não atende ao objetivo de expressar o tempo em anos e meses.

Alternativa D — ✅ Correta ⟵ Gabarito

Esta alternativa descreve exatamente a lógica do código: a função MONTHS_BETWEEN calcula o total de meses, FLOOR(... / 12) extrai os anos completos e MOD(..., 12) extrai os meses restantes.

Alternativa E — ❌ Incorreta

Embora o ROUND pudesse fornecer uma aproximação, o enunciado busca o cálculo de anos e meses de forma separada. A sugestão de usar apenas ROUND ignoraria a necessidade de exibir os meses remanescentes, perdendo a precisão do tempo de serviço detalhado.

PEGA ESSA DICA!

Para cálculos de tempo no Oracle, lembre-se: MONTHS_BETWEEN é a chave para precisão mensal. Se precisar de anos e meses, a combinação FLOOR(meses/12) e MOD(meses, 12) é o padrão de mercado para evitar erros de arredondamento e garantir a clareza do dado.

Link permanente: /questoes/fc075044