Analista Judiciário - Área Apoio Especializado Especialidade Tecnologia da Informação
Considere o seguinte trecho de código em PL/SQL:Ao ser executado em condições ideais, este comando
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.
Berra ao calcular o tempo de serviço, pois deveria ter sido usado DATEDIFF (YEAR, data_admissao, SYSDATE), que retorna diretamente os anos completos.
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.
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.
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.