Questão FC374525
A SEMCONGER precisa gerar relatórios personalizados usando SQL para identificar contratos vencidos. O analista de sistemas escreve a seguinte consulta SQL para selecionar todos os
Linguagem SQL
Instituto Consulplan · 2025
A SEMCONGER precisa gerar relatórios personalizados usando SQL para identificar contratos vencidos.
O analista de sistemas escreve a seguinte consulta SQL para selecionar todos os contratos vencidos até a data atual:
SELECT contrato_id, empresa, data_vencimento
FROM contratos
WHERE data_vencimento < SYSDATE;
No entanto, ao revisar a consulta, outro desenvolvedor apontou que a sintaxe pode não funcionar corretamente em todos os bancos de dados. Sobre essa consulta, é INCORRETO afirmar que:
- No MySQL, a função equivalente a SYSDATE seria NOW().
- A condição data_vencimento < SYSDATE filtra corretamente os contratos vencidos até o momento atual.
- SYSDATE é suportado pelo Oracle, mas outros bancos podem utilizar funções diferentes para obter a data atual.
- A função SYSDATE retorna a data e a hora do servidor, podendo variar entre diferentes instâncias de banco de dados.
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A afirmação é incorreta porque o uso de SYSDATE e da comparação com < não garante o comportamento esperado em todos os ambientes.
Primeiro, SYSDATE é uma função específica do Oracle; outros SGBDs usam GETDATE() (SQL Server), NOW() ou CURRENT_TIMESTAMP (Postgres/MySQL). Logo, a expressão não é portátil e pode falhar em bancos diferentes.
Além disso, a condição estrita < exclui registros cuja data_vencimento seja exatamente igual ao instante atual. Se se quer "vencidos até o momento atual" deve-se usar a comparação inclusiva \( \le \) (por exemplo, <= CURRENT_TIMESTAMP) ou tratar explicitamente igualdade.
Por fim, diferenças de tipo (data vs. timestamp) e de fuso/horário exigem normalização (p.ex. TRUNC em Oracle ou conversões/tz-aware timestamps) para evitar classificações incorretas.
Conteúdo do catálogo FC Concursos · Atualizado em