Adatbázis.Útmutató
az Oracle Database-ben az időzónák különböző helyeken állíthatók be. Az alábbiakban négy módon változtathatja meg az időzónát az Oracle használatakor.
az adatbázis időzónájának beállítása
az adatbázis létrehozásakor beállíthatja az adatbázis időzónáját. Ehhez használja a SET TIME_ZONE
záradékot a CREATE DATABASE
utasításban.
példa:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
ebben az esetben az időzóna régió nevét használtam. Tekintse meg, hogyan adhatja vissza az érvényes időzónák listáját az Oracle Database-ben, hogy megkapja a rendszeren érvényes régiónevek teljes listáját.
Alternatív megoldásként használhat tényleges időzóna-eltolást is:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
ha az adatbázis létrehozásakor nem állítja be kifejezetten az időzónát, akkor az alapértelmezés szerint a kiszolgáló operációs rendszerének időzónája.
az adatbázis aktuális időzónabeállítását is módosíthatja. Ehhez használja a ALTER DATABASE
utasítást.
példa:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
vegye figyelembe, hogy az adatbázis időzónája csak a TIMESTAMP WITH LOCAL TIME ZONE
oszlopokra vonatkozik. Az Oracle azt is javasolja, hogy az adatbázis időzónáját állítsa UTC (0) értékre:00) az adatkonverzió elkerülése és a teljesítmény javítása az adatbázisok közötti adatátvitel során.
a munkamenet időzónájának beállítása
a munkamenet időzónáját függetlenül beállíthatja az adatbázis időzónájához. Amikor TIMESTAMP WITH LOCAL TIME ZONE
adatot ad vissza, az az aktuális munkamenet időzónájában jelenik meg.
a munkamenet időzónája akkor is érvénybe lép, ha a TIMESTAMP
értéket TIMESTAMP WITH TIME ZONE
vagy TIMESTAMP WITH LOCAL TIME ZONE
adattípusra konvertálja.
néhány dolgot megtehet az időzóna beállításához a munkamenet szintjén.
az ORA_SDTZ környezeti változó
a munkamenet időzónáját a ORA_SDTZ
környezeti változóval állíthatja be. Ez a következő értékekre állítható be:
- operációs rendszer helyi időzóna (
'OS_TZ'
) - adatbázis időzóna (
'DB_TZ'
) - abszolút ellentételezés UTC-től (pl.
'-04:00'
) - időzóna régió neve (pl.
'America/St_Kitts'
)
Íme néhány példa a környezeti változó beállítására UNIX környezetben:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
a ORA_SDTZ
változó alapértelmezett értéke 'OD_TZ'
. Ez az érték Akkor használható, ha a változó nincs beállítva, vagy érvénytelen értékre van állítva.
az ALTER SESSION utasítás
egy adott SQL munkamenet időzónáját a SET TIME_ZONE
záradék ALTER SESSION
utasítás.
TIME_ZONE
a következő értékekre állítható be:
- alapértelmezett helyi időzóna a munkamenet indításakor (
local
) - adatbázis időzóna (
dbtimezone
) - abszolút ellentételezés UTC-től (pl.
'-04:00'
) - időzóna régió neve (pl.
'Canada/Eastern'
)
Íme egy példa a TIME_ZONE
beállítására ilyen értékekre:
ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';
az aktuális munkamenet időzónáját a SESSIONTIMEZONE
funkcióval ellenőrizheti.
példa:
SELECT SESSIONTIMEZONE FROM DUAL;
eredmény:
Australia/Brisbane
az én esetemben a munkamenet időzónája Ausztrália/Brisbane.
az AT időzóna záradék
a datetime kifejezés tartalmazhat AT LOCAL
záradékot vagy AT TIME ZONE
záradékot. Ha AT LOCAL
záradékot tartalmaz, akkor az eredmény az aktuális munkamenet időzónájában jelenik meg. Ha tartalmazza a AT TIME ZONE
záradékot, akkor az időzóna a következők egyike lehet:
- időzóna eltolás
- időzóna régió neve
-
DBTIMEZONE
(ez a függvény az adatbázis időzónáját adja vissza) -
SESSIONTIMEZONE
(ez a függvény az aktuális munkamenet időzónáját adja vissza) - egy kifejezés, amely érvényes időzóna formátumú karakterláncot ad vissza.
példa:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
eredmény:
02/JAN/30 04:30:35.000000000 AM +12:00
ebben az esetben a FROM_TZ()
függvényt használtam, hogy egy időbélyeg értéket és egy időzónát TIMESTAMP WITH TIME ZONE
értékre konvertáljak. Ezután a AT TIME ZONE
záradékot használtam egy másik időzóna megadásához.
itt ugyanaz a példa, kivéve ezúttal megadom AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
eredmény:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE