Olá,
Vamos falar rapidamente sobre os tipos de dados que armazenam data.
Aqui vamos falar de date,timestamp,timestamp with timezone e timestamp with local timezone.O tipo INTERVAL que armazena intervalo de datas já foi abordado em outro post neste blog.
date : armazena o dia,mes,ano,hora.minuto e segundos.
timestamp : armazena o dia,mes,ano,hora.minuto mais a precisão de segundos que vai de de 0-9.O default(padrão) é 6 .
timestamp with time zone: armazena o dia,mes,ano,hora.minuto mais a precisao de segundos que vai de de 0-9.O default(padrão) é 6 .
A diferença aqui é que é armazenado o deslocamento em relação ao UTC(Cordinated Universal Time) or Greenwich Mean Time por exemplo para a cidade de São Paulo temos "-3:00".
O deslocamento é armazenado juntamente com o dado real no banco de dados.
timestamp with local time zone : armazena o dia,mes,ano,hora.minuto mais a precisão de segundos que vai de de 0-9.O default(padrão) é 6 .
A diferença agora para o tipo acima é que o deslocamento em relação ao UTC não é armazenado juntamente com os dados deste tipo.Funciona assim,de acordo com a configuração de
do time zone de cada sessão do usuário o Oracle mostra o valor correspondente ao que foi armazenado.
Para ficar melhor mostraremos um exemplo:
SQL> create table x_date_datatypes(id number(2),dt date,tmstp timestamp(4),tmstp_local timestamp(6) with local time zone,tmstp_wtmz timestamp(2) with time zone);
Table created.
Elapsed: 00:00:00.08
SQL> insert into x_date_datatypes
values(1,sysdate,systimestamp,systimestamp,systimestamp) ; 2
1 row created.
Elapsed: 00:00:00.03
SQL> commit;
Commit complete.
Elapsed: 00:00:00.28
SQL>
SQL> alter session set nls_date_format ='dd/mm/rrrr hh24:mi:ss' ;
Session altered.
Elapsed: 00:00:00.03
SQL> select * from x_date_datatypes;
ID DT TMSTP TMSTP_LOCAL TMSTP_WTMZ
--- ------------------- ------------------------------ ------------------------------ ------------------------------------------------------------
1 03/08/2010 00:44:54 03-AUG-10 12.44.54.3052 AM 03-AUG-10 12.44.54.305240 AM 03-AUG-10 12.44.54.31 AM -03:00
Elapsed: 00:00:00.00
SQL>
Como podemos ver ,a segunda coluna é do tipo date e armazena até a precisado do segundo.
Na terceira coluna o tipo é timestamp e podemos ver que está armazenando a precisão em frações de segundos com 4 posições como definido no comando CREATE TABLE.
Vamos falar sobre a quinta coluna primeiro que é do tipo timestamp with time zone.Podemos ver que ela armazena o deslocamento em relação ao UTC,que para São Paulo é -03:00.
Mesmo trocando o fuso horário da sessão/time zone o valor não é alterado,pois o deslocamento é armazenado juntamente com os dados.
Na quarta coluna que é do tipo timestamp with local timezone é armazenado como no tipo timestamp a precisão em frações de segundos.
Podemos notar no default que não aparece o deslocamento em relação ao UTC,mas se fizermos o seguinte:
SQL> alter session set time_zone='+6:00' ;
Session altered.
Elapsed: 00:00:00.00
SQL> select systimestamp from dual ;
SYSTIMESTAMP
---------------------------------------------------------------------------
03-AUG-10 01.15.20.695118 AM -03:00
Elapsed: 00:00:00.00
SQL> select * from x_date_datatypes;
ID DT TMSTP TMSTP_LOCAL TMSTP_WTMZ
--- ------------------- ------------------------------ ------------------------------ ------------------------------------------------------------
1 03/08/2010 00:44:54 03-AUG-10 12.44.54.3052 AM 03-AUG-10 09.44.54.305240 AM
Podemos ver que o valor mostrado na coluna TMSTP_LOCAL está calculado segundo a sessão do usuário descontando mais 3 horas em relação ao UTC,pois no valor armazenado no banco de dados
o UTC era -03:00
Dica :Consulte a V$TIMEZONE_NAMES
Para mais informações sobre estes tipos de data/hora consulte aguide de SQL disponível no tahiti.oracle.com .
Abs,
JC
No comments:
Post a Comment