Para saber o tempo de serviço de cada funcionário da sua equipe, um Analista de Sistemas deseja utilizar, em um banco de dados Oracle aberto e em condições ideais, um comando PL/SQL para exibir o nome do funcionário (campo nome) e calcular o número de meses entre a data atual e a data em que o funcionário foi admitido (campo data_admissao), arredondando o número de meses para o valor inteiro mais próximo. Considerando que a tabela onde estão os dados chama-se funcionario, terá que utilizar o comando
ASELECT nome, ROUND(MONTHS_BETWEEN(DATE(), data_admissao)) FROM funcionario;
BSELECT nome, LPAD(MONTHS(SYSDATE,data_admissao)) FROM funcionario;
CSELECT nome, ROUND(MONTHS(DATE(),data_admissao)) FROM funcionario;
DSELECT nome, ROUND(SYSDATE() - data_admissao) FROM funcionario;
ESELECT nome, ROUND(MONTHS_BETWEEN(SYSDATE,data_admissao)) FROM funcionario;
Revelar gabarito e comentário▾
GabaritoE — SELECT nome, ROUND(MONTHS_BETWEEN(SYSDATE,data_admissao)) FROM funcionario;
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”.
PL/SQL: Cálculo de meses entre datas com arredondamento
Gabarito: letra E. O comando correto é SELECT nome, ROUND(MONTHS_BETWEEN(SYSDATE, data_admissao)) FROM funcionario;. A função MONTHS_BETWEEN calcula o número de meses entre duas datas, SYSDATE retorna a data/hora atual, e ROUND arredonda para o inteiro mais próximo. Todas as demais alternativas utilizam funções inexistentes ou inadequadas no Oracle.
A banca testa o conhecimento das funções de data do Oracle e a sintaxe correta do SELECT.
1SYSDATE (data/hora atual)
2MONTHS_BETWEEN(d1,d2)
3ROUND (arredonda)
4ADD_MONTHS
5NEXT_DAY / LAST_DAY
6TRUNC (trunca data)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Usa DATE() sem argumentos e ROUND(MONTHS_BETWEEN(DATE(), data_admissao)). No Oracle, DATE() não é uma função válida; a função para retornar a data atual é SYSDATE ou CURRENT_DATE. Além disso, MONTHS_BETWEEN requer duas datas, e DATE() não existe.
Alternativa B — ❌ Incorreta
Usa LPAD(MONTHS(SYSDATE, data_admissao)). LPAD é uma função de formatação de strings (preenche à esquerda), não calcula meses. A função MONTHS não existe; o correto é MONTHS_BETWEEN. A sintaxe está completamente errada.
Alternativa C — ❌ Incorreta
Usa ROUND(MONTHS(DATE(), data_admissao)). Novamente, MONTHS não é uma função Oracle, e DATE() não é válido. O correto é MONTHS_BETWEEN com SYSDATE.
Alternativa D — ❌ Incorreta
Usa ROUND(SYSDATE() - data_admissao). SYSDATE() com parênteses não é a sintaxe correta (é SYSDATE sem parênteses). Além disso, a subtração de datas retorna o número de dias, não de meses. Para obter meses, deve-se usar MONTHS_BETWEEN. Portanto, o resultado não atende ao requisito.
Alternativa E — ✅ Correta ⟵ GABARITO
SELECT nome, ROUND(MONTHS_BETWEEN(SYSDATE, data_admissao)) FROM funcionario; é a sintaxe exata. MONTHS_BETWEEN calcula a diferença em meses (pode ser fracionário), e ROUND arredonda para o inteiro mais próximo, conforme exigido.
PEGA ESSA DICA!
No Oracle, memorize as principais funções de data: SYSDATE (data/hora atual), MONTHS_BETWEEN(d1, d2), ADD_MONTHS, NEXT_DAY, LAST_DAY, ROUND e TRUNC (para datas). Evite confundir com outras funções como LPAD, MONTHS, ou DATE().