Database.Guida

Nel database Oracle, i fusi orari possono essere impostati in vari luoghi. Di seguito sono riportati quattro modi per modificare il fuso orario quando si utilizza Oracle.

Imposta il fuso orario del database

È possibile impostare il fuso orario del database durante la creazione del database. Per fare ciò, utilizzare la clausola SET TIME_ZONE dell’istruzione CREATE DATABASE.

Esempio:

CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

In questo caso, ho usato un nome di regione del fuso orario. Vedere Come restituire un elenco di fusi orari validi nel database Oracle per ottenere un elenco completo dei nomi di regione validi sul sistema.

In alternativa, è possibile utilizzare un offset del fuso orario effettivo:

CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';

Se non si imposta esplicitamente il fuso orario durante la creazione del database, il fuso orario predefinito è il sistema operativo del server.

È inoltre possibile modificare l’impostazione del fuso orario corrente per il database. Per fare ciò, utilizzare l’istruzione ALTER DATABASE.

Esempio:

ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

Si noti che il fuso orario del database è rilevante solo per le colonne TIMESTAMP WITH LOCAL TIME ZONE. Inoltre, Oracle consiglia di impostare il fuso orario del database su UTC (0:00) per evitare la conversione dei dati e migliorare le prestazioni quando i dati vengono trasferiti tra i database.

Imposta il fuso orario della sessione

È possibile impostare il fuso orario della sessione in modo indipendente sul fuso orario del database. Quando si restituiscono i dati TIMESTAMP WITH LOCAL TIME ZONE, vengono restituiti nel fuso orario della sessione corrente.

Il fuso orario della sessione ha effetto anche quando un valore TIMESTAMP viene convertito nel tipo di dati TIMESTAMP WITH TIME ZONE o TIMESTAMP WITH LOCAL TIME ZONE.

Puoi fare un paio di cose per impostare il fuso orario a livello di sessione.

La variabile d’ambiente ORA_SDTZ

È possibile impostare il fuso orario della sessione con la variabile d’ambiente ORA_SDTZ. Questo può essere impostato con i seguenti valori:

  • sistema Operativo fuso orario locale ('OS_TZ')
  • Database di fuso orario ('DB_TZ')
  • offset Assoluto da UTC (ad es.'-04:00')
  • fuso orario nome della regione (ad es. 'America/St_Kitts')

di seguito alcuni esempi di impostazione di questa variabile di ambiente in ambiente UNIX:

% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'

il valore predefinito per Il ORA_SDTZ variabile 'OD_TZ'. Questo valore viene utilizzato quando la variabile non è impostata o è impostata su un valore non valido.

L’istruzione ALTER SESSION

È possibile modificare il fuso orario per una sessione SQL specifica con la clausola SET TIME_ZONE dell’istruzione ALTER SESSION.

TIME_ZONE può essere impostato sui seguenti valori:

  • Fuso orario locale predefinito all’avvio della sessione(local)
  • Fuso orario del database (dbtimezone)
  • Scostamento assoluto da UTC (ad es. '-04:00')
  • Nome della regione del fuso orario (ad es. 'Canada/Eastern')

Ecco un esempio di impostazione TIME_ZONE a tali 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';

È possibile controllare il fuso orario della sessione corrente con la funzione SESSIONTIMEZONE.

Esempio:

SELECT SESSIONTIMEZONE FROM DUAL;

Risultato:

Australia/Brisbane 

Nel mio caso, il fuso orario della sessione è impostato su Australia / Brisbane.

La clausola AT TIME ZONE

Un’espressione datetime può includere una clausola AT LOCAL o una clausola AT TIME ZONE. Se si include una clausola AT LOCAL, il risultato viene restituito nel fuso orario della sessione corrente. Se si include la clausola AT TIME ZONE, il fuso orario può essere uno dei seguenti:

  • Una differenza di fuso orario
  • Un tempo zona di regione nome
  • DBTIMEZONE (questa funzione restituisce il fuso orario del database)
  • SESSIONTIMEZONE (questa funzione restituisce il fuso orario della sessione corrente)
  • Un’espressione che restituisce una stringa di caratteri con un fuso orario valido formato.

Esempio:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;

Risultato:

02/JAN/30 04:30:35.000000000 AM +12:00

In questo caso ho usato la funzione FROM_TZ() per convertire un valore di timestamp e un fuso orario in un valore TIMESTAMP WITH TIME ZONE. Ho quindi utilizzato la clausola AT TIME ZONE per specificare un fuso orario diverso.

Ecco lo stesso esempio, tranne questa volta specificato AT LOCAL:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;

Risultato:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

Leave a Reply

Il tuo indirizzo email non sarà pubblicato.