Odpověď zní:Záleží.
Celkem má vaše databáze tři časová pásma
- Časové pásmo vaší relace:
SESSIONTIMEZONE
Toto můžete změnit pomocí ALTER SESSION SET TIME_ZONE=...
kdykoliv. Je relevantní pro výsledek
-
CURRENT_DATE
-
LOCALTIMESTAMP
-
CURRENT_TIMESTAMP
Je to také cílové časové pásmo, když provedete CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)
Výchozí SESSIONTIMEZONE
lze nastavit pomocí proměnné prostředí ORA_SDTZ
nebo (v systému Windows) záznamem registru HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(pro 32 bitového klienta), resp. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(pro 64bitového klienta).
- Časové pásmo databáze:
DBTIMEZONE
Ve skutečnosti to není při každodenním používání tak důležité, je to relevantní pouze pro TIMESTAMP WITH LOCAL TIME ZONE
sloupce datového typu a definuje formát úložiště.
Toto NE časové pásmo SYSDATE
nebo SYSTIMESTAMP
!!!
DBTIMEZONE
nelze změnit ve vaší databázi, pokud databáze obsahuje tabulku s TIMESTAMP WITH LOCAL TIME ZONE
a sloupec obsahuje data. Jinak jej lze změnit pomocí ALTER DATABASE SET TIME_ZONE='...';
. Změna se neprojeví, dokud nebude databáze vypnuta a restartována.
DBTIMEZONE
je nastaveno při vytváření databáze. Pokud není při vytváření databáze zadáno žádné časové pásmo, pak Oracle jako výchozí použije časové pásmo operačního systému serveru.
- Časové pásmo operačního systému databázového serveru:
Toto časové pásmo je relevantní pro výsledek
-
SYSDATE
-
SYSTIMESTAMP
Toto časové pásmo samozřejmě nelze změnit na úrovni databáze. V případě, že vaše domovská země používá letní čas, může se toto časové pásmo dvakrát ročně změnit. Můžete to zjistit pomocí SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;
, například.
Pokud je tedy váš operační systém DB Server správně nastaven, měli byste od příštího týdne dostávat letní časy (alespoň pro Evropu)