Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados — FGV 2024

Banco de DadosBanco 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:
  1. Alocaltimestamp;
  2. Bcurrent_timestamp;
  3. Ctimestamp;
  4. Dtimestamp with timezone;
  5. 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)

1Sem timezone
TIMESTAMP
Armazena valor exato, sem conversão
2Com timezone explícito
TIMESTAMP WITH TIME ZONE
Exibe valor original com fuso
3Com timezone local
TIMESTAMP WITH LOCAL TIME ZONE
Armazena em UTC
Converte para fuso da sessão
Tipos timestamp SQL
LEVELsoulevel.com.br
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.

Gabarito: letra E.

Link permanente: /questoes/fg077431