Baza De Date.Ghid
în Oracle Database, fusurile orare pot fi setate în diferite locuri. Mai jos sunt patru moduri de a schimba fusul orar atunci când utilizați Oracle.
setarea fusului orar al bazei de date
puteți seta fusul orar al bazei de date la crearea bazei de date. Pentru aceasta, utilizați clauza SET TIME_ZONE
din Instrucțiunea CREATE DATABASE
.
exemplu:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
în acest caz, am folosit un nume de regiune de fus orar. Vedeți cum să returnați o listă de fusuri orare valide în Oracle Database pentru a obține o listă completă a numelor de regiuni valide din sistemul dvs.
alternativ, puteți utiliza o compensare reală a fusului orar:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
dacă nu setați în mod explicit fusul orar la crearea bazei de date, atunci acesta este implicit la fusul orar al sistemului de operare al serverului.
de asemenea, puteți modifica setarea curentă a fusului orar pentru baza de date. Pentru aceasta, utilizați instrucțiunea ALTER DATABASE
.
exemplu:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
rețineți că fusul orar al bazei de date este relevant numai pentru coloanele TIMESTAMP WITH LOCAL TIME ZONE
. De asemenea, Oracle vă recomandă să setați fusul orar al bazei de date la UTC (0:00) pentru a evita conversia datelor și pentru a îmbunătăți performanța atunci când datele sunt transferate între bazele de date.
setarea fusului orar al sesiunii
puteți seta fusul orar al sesiunii în mod independent la fusul orar al bazei de date. Când returnați datele TIMESTAMP WITH LOCAL TIME ZONE
, acestea sunt returnate în fusul orar al sesiunii curente.
fusul orar al sesiunii intră în vigoare și atunci când o valoare TIMESTAMP
este convertită la tipul de date TIMESTAMP WITH TIME ZONE
sau TIMESTAMP WITH LOCAL TIME ZONE
.
puteți face câteva lucruri pentru a seta fusul orar la nivelul sesiunii.
variabila de mediu ORA_SDTZ
puteți seta fusul orar al sesiunii cu variabila de mediu ORA_SDTZ
. Aceasta poate fi setată la următoarele valori:
- sistem de Operare fus orar local (
'OS_TZ'
) - Fusul orar al bazei de date (
'DB_TZ'
) - compensare absolută față de UTC (de ex.
'-04:00'
) - numele regiunii fusului orar (de ex.
'America/St_Kitts'
)
iată câteva exemple de setare a acestei variabile de mediu într-un mediu UNIX:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
valoarea implicită a variabilei ORA_SDTZ
este 'OD_TZ'
. Această valoare este utilizată atunci când variabila nu este setată sau este setată la o valoare nevalidă.
instrucțiunea ALTER SESSION
puteți modifica fusul orar pentru o anumită sesiune SQL cu clauza SET TIME_ZONE
a instrucțiunii ALTER SESSION
.
TIME_ZONE
poate fi setat la următoarele valori:
- Fusul orar local implicit când a început sesiunea (
local
) - Fusul orar al bazei de date (
dbtimezone
) - compensare absolută față de UTC (de ex.
'-04:00'
) - numele regiunii fusului orar (de ex.
'Canada/Eastern'
)
Iată un exemplu de setare TIME_ZONE
la astfel de valori:
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';
puteți verifica fusul orar al sesiunii curente cu funcția SESSIONTIMEZONE
.
exemplu:
SELECT SESSIONTIMEZONE FROM DUAL;
rezultat:
Australia/Brisbane
în cazul meu, fusul orar al sesiunii este setat la Australia / Brisbane.
Clauza de fus orar AT
o expresie datetime poate include o clauză AT LOCAL
sau o clauză AT TIME ZONE
. Dacă includeți o clauză AT LOCAL
, atunci rezultatul este returnat în fusul orar al sesiunii curente. Dacă includeți clauza AT TIME ZONE
, atunci fusul orar poate fi unul dintre următoarele:
- un decalaj de fus orar
- un nume de regiune de fus orar
-
DBTIMEZONE
(această funcție returnează fusul orar al bazei de date) -
SESSIONTIMEZONE
(această funcție returnează fusul orar al sesiunii curente) - o expresie care returnează un șir de caractere cu un format de fus orar valid.
exemplu:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
rezultat:
02/JAN/30 04:30:35.000000000 AM +12:00
în acest caz, am folosit funcția FROM_TZ()
pentru a converti o valoare timestamp și un fus orar la o valoare TIMESTAMP WITH TIME ZONE
. Apoi am folosit clauza AT TIME ZONE
pentru a specifica un alt fus orar.
iată același exemplu, cu excepția de data aceasta am specifica AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
rezultat:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE