Questão de Banco de Dados — Banco de Dados — FGV 2024
Banco de Dados›Banco de Dados
Código
fg077431
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 9 - TI / Infraestrutura e Segurança - Tarde
João trabalha na filial de uma multinacional no Rio de Janeiro (GMT-3) e recebeu alguns relatórios da sede da empresa localizada na Califórnia (GMT-8). Durante a verificação, João identificou uma tabela com uma coluna que trazia informações de timestamp e timezone da sua filial e não da sede onde o relatório havia sido gerado. João entrou em contato com a sede para relatar o ocorrido, pois, se o relatório foi feito na Califórnia, deveria estar com as configurações de timestamp e timezone da sede. Entretanto, a sede da empresa informou que tabela anexada ao relatório teve seu campo definido como:
Alocaltimestamp;
Bcurrent_timestamp;
Ctimestamp;
Dtimestamp with timezone;
Etimestamp with local timezone.
Revelar gabarito e comentário▾
GabaritoE — timestamp with local timezone.
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”.
Tipos de timestamp em SQL e conversão de timezone
Gabarito: letra E (timestamp with local timezone). Esse tipo de dado armazena o timestamp de forma normalizada (geralmente em UTC) e, ao ser recuperado, converte automaticamente para o fuso horário da sessão do cliente. Por isso, João (GMT-3) enxergou os horários no fuso da filial, e não no da sede (GMT-8).
A questão testa a diferença entre os tipos temporais do SQL padrão (especialmente Oracle/PostgreSQL). O comportamento descrito — timestamp exibido no timezone do cliente — é característico do TIMESTAMP WITH LOCAL TIME ZONE (ou TIMESTAMP WITH LOCAL TIME ZONE no Oracle, TIMESTAMP WITH TIME ZONE no PostgreSQL? Cuidado: no PostgreSQL, TIMESTAMP WITH TIME ZONE também converte para a sessão, mas o nome padrão SQL é outro. A FGV adota a nomenclatura Oracle, onde:
TIMESTAMP – sem timezone; armazena a data/hora como fornecida.
TIMESTAMP WITH TIME ZONE – armazena com o timezone explícito; exibe sempre o mesmo valor (não converte).
TIMESTAMP WITH LOCAL TIME ZONE – armazena normalizado para o banco (UTC) e exibe convertido para o timezone da sessão.
Tipo de Dado
Armazena Timezone?
Comportamento na Exibição
Exemplo (inserido em GMT-8, visto em GMT-3)
TIMESTAMP
Não
Exibe o valor exato inserido, sem conversão
'2024-01-15 10:00:00' (visto como 10:00)
TIMESTAMP WITH TIME ZONE
Sim (explícito)
Exibe o valor com o timezone original, sem conversão
'2024-01-15 10:00:00 -08:00' (visto como -08:00)
TIMESTAMP WITH LOCAL TIME ZONE
Sim (normalizado para UTC)
Converte automaticamente para o fuso da sessão do cliente
'2024-01-15 10:00:00' (visto como 15:00 em GMT-3)
Tipos timestamp SQL: Sem timezone (TIMESTAMP, Armazena valor exato, sem conversão); Com timezone explícito (TIMESTAMP WITH TIME ZONE, Exibe valor original com fuso); Com timezone local (TIMESTAMP WITH LOCAL TIME ZONE, Armazena em UTC, Converte para fuso da sessão)
Alternativa A — ❌ Incorreta
localtimestamp é uma função SQL que retorna a data/hora local da sessão, não é um tipo de coluna. Não se aplica ao contexto.
Alternativa B — ❌ Incorreta
current_timestamp também é uma função, não um tipo de dado. Retorna o timestamp com timezone do banco.
Alternativa C — ❌ Incorreta
timestamp (sem timezone) armazena o valor exato informado, sem qualquer conversão. Se o relatório foi gerado na Califórnia, a coluna conteria os horários originais (GMT-8) e João os veria exatamente como foram inseridos — sem adaptação ao seu fuso.
Alternativa D — ❌ Incorreta
timestamp with time zone armazena o timestamp com o fuso horário explícito. Quando João recuperasse o dado, veria o valor original (ex.: '2024-01-15 10:00:00 -08:00'), não convertido para GMT-3. Portanto, não explicaria o erro reportado.
Alternativa E — ✅ Correta ⟵ GABARITO
timestamp with local time zone armazena o timestamp em um formato interno (normalmente UTC) e, na hora de exibir, converte automaticamente para o fuso horário configurado na sessão do cliente. Assim, o banco da sede (em GMT-8) insere os dados convertendo para UTC; João, ao abrir o relatório com sessão em GMT-3, recebe os horários convertidos para o seu fuso. Isso gerou a confusão: ele achou que o timestamp estava errado, mas era exatamente o comportamento esperado do tipo.
NÃO CAIA NESSA!
A banca troca timestamp with time zone (preserva o fuso original) por timestamp with local time zone (converte para o fuso da sessão). Muitos candidatos confundem os dois, mas o primeiro não faria a conversão automática que João observou.