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

Leave a Reply

Az e-mail-címet nem tesszük közzé.