14 Ağustos 2014 Perşembe

Date VS Timestamp in Oracle

         Timestamp ile sysdate arasındaki karşılaştığm en önemli fark birisinin makinanın saatini alması diğerinin ise timezone'a göre zamanı vermesidir.

       Uygulama ekipleri bazı date alanlarını timestamp tanımlayıp ona göre doldurabilirler.  Bir süre sonra database'in ya da session'ının timezone'u değiştiğinde columlardaki date değeri sysdate'den farklı olacağı için size gelip database zamanı yanlış gösteriyor diyebilirler.
Database zamanı yanlış diye geldikleri zaman ilk kontrol edilmesi gerekenler:

1.    OS (Operating System)sistem zamanı. Database zamanı OS'den alır.
Dbname oracle@hostname:/home/oracle>date
Thu Aug 14 09:23:06 EETDST 2014
2.       Database sysdate

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2014 08 14 09:27:21

SQL> select to_char(sysdate,'YYYY MM DD HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2014 08 14 09:28:06

3.       Database timezone kontrol edilir.


SELECT sessiontimezone FROM DUAL;

select dbtimezone   from dual;


4.        Database  timestamp değeri kontrol edilir.

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
14-AUG-14 09.29.28.339601 AM +03:00

Timestamp column create etme ve değer yükleme


create table timezone_test1 (timezone TIMESTAMP(6) WITH TIME ZONE , v_date date , id number)

insert into timezone_test1 values (sysdate,sysdate,1);
commit

insert into timezone_test1 values (CURRENT_TIMESTAMP,sysdate,3);
commit


select * from timezone_test1

Hiç yorum yok:

Yorum Gönder