Oracle Time Zone
amikor azt hitted, hogy tudod, hol vagy, az Oracle időzónákat vezetett be, hogy teljesen zónázzon minket. Gyere, és nézzük meg, hol vagyunk ezen a nagyszerű bolygón.
néhány cikk a dátum adattípus és az időbélyeg adattípus összehasonlításáról. Ez a cikk egy lépéssel tovább megy, és feltárja az Oracle időzóna funkcióját az időbélyeg adattípusában. Különösen az Oracle hozzáadta az” időzónával “és a” helyi időzónával ” az időbélyeg adattípusához.
érvényes időzónák
két lehetőség közül választhat, amikor beállítja, hogy az adatbázis melyik időzónához tartozik. Akkor sem minősíteni, mint egy elmozdulás GMT / UTC formátumban ‘hh:mm’, vagy megadhatja, mint egy nevet, amely egy bejegyzést a V$időzóna tábla. Az 1. lista azt az SQL-t mutatja, amelyet az érvényes időzóna nevének megjelenítéséhez használtam a Mountain Standard időzónában.
lista 1
MST érvényes időzónanevek megjelenítése
SQL> select tzname,tzabbrev from V$TIMEZONE_NAMES where tzabbrev = 'MST'TZNAME TZABBREV------------------------- ----------America/Denver MSTAmerica/Edmonton MSTAmerica/Ensenada MSTAmerica/Mazatlan MSTAmerica/Mexico_City MSTAmerica/Phoenix MSTAmerica/Regina MSTAmerica/Shiprock MSTAmerica/Tijuana MSTCanada/East-Saskatchewan MSTCanada/Mountain MSTCanada/Saskatchewan MSTEurope/Moscow MSTMexico/BajaNorte MSTMexico/BajaSur MSTMexico/General MSTMST MSTMST7MDT MSTNavajo MSTUS/Arizona MSTUS/Mountain MSTW-SU MST
DBTIMEZONE
az időzónák középpontjában az adatbázis időzónája található. Az adatbázis létrehozásakor kiválasztott időzónát úgy tekintheti meg, hogy kiadja az SQL-t a 2.listában. Ha meg akarja változtatni a DBTIMEZONE – t, ki kell adnia egy ALTER DATBASE parancsot, például a 3.listában. Annak érdekében, hogy az új DBTIMEZONE életbe léphessen, vissza kell ugrálnia az adatbázist. Továbbá, ha bármilyen adattípus oszlopok, amelyek az időbélyeg időzóna meghatározott, akkor nem lesz képes visszaállítani a DBTIMEZONE. Az adatbázis visszapattanása után kiadhatja az SQL-t a 4. listában annak igazolására, hogy a változás megtörtént. Ha vissza akart váltani a ” hh:mm ” formátum a DBTIMEZONE számára, csak adja ki az SQL-t az 5. listában.
lista 2
ellenőrizze az adatbázis időzónáját
SQL> select DBTIMEZONE from dual;DBTIME-------07:00
3. lista
az adatbázis időzónájának módosítása
SQL> ALTER database SET TIME_ZONE = 'America/Denver';Database altered.
4. felsorolás
érvényesítse a dbtimezone változását
SQL> select DBTIMEZONE from dual;DBTIMEZONE---------------America/Denver
Listing 5
állítsa vissza a DBTIMEZONE-t óó:mm formátumra
SQL> ALTER database SET TIME_ZONE = '-07:00';
SESSIONTIMEZONE
ha nem szeretné használni az adatbázis időzónáját, az Oracle lehetőséget ad arra, hogy az időzónát a munkamenet szintjén állítsa be. Adja ki az SQL-t a 6. listában, ha más időzónát szeretne az aktuális munkamenethez, amelyhez csatlakozik. A munkamenet időzónáját az SQL kiadásával ellenőrizheti a 7. listában.
felsorolás 6
időzóna beállítása a munkamenet szintjén
SQL> alter session set TIME_ZONE='-03:00';Session altered.
Listing 7
munkamenet szintű időzóna ellenőrzése
SQL> select SESSIONTIMEZONE from dual;SESSIONTIMEZONE--------------------------------------------------03:00
SYSTIMESTAMP
ahogy van egy hívás SYSDATE, hogy az aktuális rendszer dátum és idő, van egy hívás, hogy az aktuális rendszer dátum, idő és időzóna. A visszaadott adattípus időbélyeg időzónával. Adja ki az SQL-t a 8. listában, hogy megkapja az aktuális rendszeridő-információkat.
lista 8
aktuális rendszer időbélyeg lekérése időzóna információkkal
SQL> select SYSTIMESTAMP from dual;SYSTIMESTAMP-----------------------------------------------01-SEP-03 10.53.13.574000 AM -07:00
CURRENT_TIMESTAMP
a systimestamp függvény számláló része a munkamenet aktuális dátumához és idejéhez a CURRENT_TIMESTAMP függvényhívás. Ez visszaadja a munkamenet aktuális időbélyegzőjét a munkamenet időzónájához (SESSIONTIMEZONE) viszonyítva. Ezért, ha megvan a munkamenet időzónája a 6. listában meghatározottak szerint, ellenőrizhetjük a munkamenet időbélyegét az SQL kiadásával a 9.listában.
lista 9
munkamenet helyi időbélyege
SQL> select CURRENT_TIMESTAMP from dual;CURRENT_TIMESTAMP-------------------------------------------------01-SEP-03 02.53.33.753000 PM 03:00
időbélyeg adattípus az IDŐZÓNAINFORMÁCIÓ
az időzónainformációk táblázaton belüli tárolásának középpontjában az Oracle meghatározta az időbélyeg adattípusát. Ez az Oracle nagyszerű új reménye arra, hogy a régi dátum adattípusnak részletesebb mechanizmust adjon nemcsak a dátum-és időinformációk, hanem a tört másodpercek tárolására is. Nézze meg az Oracle dátum-és időbélyeg-adattípusainak összehasonlítását a databtype megvitatásához. A cikk további részében, valamint az időbélyeg adattípus időzóna-beállításainak kihasználása céljából létrehoztam egy táblázatot az 1. táblázatban meghatározottak szerint. A 10. listában létrehoztam egy gyors példát arra, hogy az időzóna időbélyegzője és a helyi időzóna-adattípusok időbélyegzője hogyan fog viselkedni, amikor információkat tárolnak. Először is beállítottam a DBTIMEZONE és a SESSION időzónát, hogy ugyanaz az érték ‘-07: 00’ legyen. Ezután beillesztem a DATE_TABLE-be a rendszer időbélyegzőjének értékét. Ezután az aktuális munkamenet időzónáját csak ‘-03:00’értékre változtatom. Ez az aktuális munkamenetet négy órával az adatbázis időzónája előtt állítja be. Ezután beillesztem a DATE_TABLE-be egy sort, amely az aktuális munkamenet időbélyegét fogja tartani. A fő gondolat, hogy megragad itt az, hogy az oszlop adattípus időbélyeg időzónával tárolja és megjeleníti az explicit időt biztosított az INSERT utasítás. A helyi időzónával rendelkező adattípus-időbélyeggel ellátott oszlop tárolja a megadott explicit időt, de az aktuális munkamenet időzónájához viszonyított értéket jelenít meg. Ez azt jelenti, hogy ha kemény és gyors időbélyegeket szeretne tárolni az időzóna-információkkal, akkor az időzóna-adattípusú időbélyegzőt kell használnia. Ha jobban érdekli a dátum – és időadatok megadása a különböző időzónákban lévő és a helyi időben megjelenített ügyfelek számára, akkor használja az időbélyeget a helyi időzóna-adattípussal.
1. táblázat:
Táblázat létrehozása különböző időbélyeg oszlopokkal
create table date_table ( time_stamp_tz TIMESTAMP WITH TIME ZONE, time_stamp_ltz TIMESTAMP WITH LOCAL TIME ZONE);
lista 10
SYSTIMESTAMP beszúrása a DATE_TABLE-be
SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -07:00SQL> insert into date_table values (SYSTIMESTAMP,SYSTIMESTAMP);1 row created.SQL> alter session set time_zone='-03:00';Session altered. SQL> select dbtimezone,sessiontimezone from dual;DBTIMEZONE SESSIONTIMEZONE---------- -----------------07:00 -03:00SQL> insert into date_table values (LOCALTIMESTAMP,LOCALTIMESTAMP );1 row created.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-03 02.57.36.642000 PM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-03 02.57.48.549000 PMSQL> alter session set time_zone='-07:00';Session altered.SQL> select time_stamp_tz, time_stamp_ltz from date_table;TIME_STAMP_TZ TIME_STAMP_LTZ------------------------------------- ------------------------------01-SEP-03 10.57.36.642000 AM -07:00 01-SEP-0310.57.36.642000 AM01-SEP-03 02.57.48.549000 PM -03:00 01-SEP-0310.57.48.549000 AM
mindannyian felnőttünk és elfogadtuk az időzónákat. Mindig könnyű volt megtenni az óránkénti különbséget a fejünkben, amikor felhívunk valakit, vagy más időzónába utazunk. Valamilyen oknál fogva az időzónák GMT/UTC eltolásokkal történő megvalósítása megnehezítette számomra, hogy megfogalmazzam és kitaláljam, hol és mennyi az idő valójában. Azt javasolnám, hogy játszadozzatok azzal a példával, amit adtam nektek, hogy megismerhessétek ezt a tulajdonságot, és hogy hol a földön vagytok.
” James Koopmann Rovatvezető összes cikkének megtekintése