Base de données.Guide

Dans la base de données Oracle, les fuseaux horaires peuvent être définis à différents endroits. Vous trouverez ci-dessous quatre façons de modifier le fuseau horaire lors de l’utilisation d’Oracle.

Définir le fuseau horaire de la base de données

Vous pouvez définir le fuseau horaire de la base de données lors de la création de la base de données. Pour ce faire, utilisez la clause SET TIME_ZONE de l’instruction CREATE DATABASE.

Exemple:

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

Dans ce cas, j’ai utilisé un nom de région de fuseau horaire. Voyez Comment renvoyer une liste de fuseaux horaires valides dans Oracle Database pour obtenir une liste complète des noms de région valides sur votre système.

Alternativement, vous pouvez utiliser un décalage de fuseau horaire réel:

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

Si vous ne définissez pas explicitement le fuseau horaire lors de la création de la base de données, le fuseau horaire du système d’exploitation du serveur est par défaut.

Vous pouvez également modifier le paramètre de fuseau horaire actuel de la base de données. Pour ce faire, utilisez l’instruction ALTER DATABASE.

Exemple:

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

Notez que le fuseau horaire de la base de données n’est pertinent que pour les colonnes TIMESTAMP WITH LOCAL TIME ZONE. En outre, Oracle vous recommande de définir le fuseau horaire de la base de données sur UTC(0:00) pour éviter la conversion des données et améliorer les performances lorsque les données sont transférées entre des bases de données.

Définir le fuseau horaire de la session

Vous pouvez définir le fuseau horaire de la session indépendamment du fuseau horaire de la base de données. Lorsque vous renvoyez des données TIMESTAMP WITH LOCAL TIME ZONE, elles sont renvoyées dans le fuseau horaire de la session en cours.

Le fuseau horaire de session prend également effet lorsqu’une valeur TIMESTAMP est convertie en type de données TIMESTAMP WITH TIME ZONE ou TIMESTAMP WITH LOCAL TIME ZONE.

Vous pouvez faire quelques choses pour définir le fuseau horaire au niveau de la session.

La variable d’environnement ORA_SDTZ

Vous pouvez définir le fuseau horaire de la session avec la variable d’environnement ORA_SDTZ. Cela peut être défini sur les valeurs suivantes:

  • Fuseau horaire local du système d’exploitation ('OS_TZ')
  • Fuseau horaire de la base de données ('DB_TZ')
  • Décalage absolu par rapport à UTC (p. ex.'-04:00')
  • Nom de la région du fuseau horaire (p. ex. 'America/St_Kitts')

Voici quelques exemples de définition de cette variable d’environnement dans un environnement UNIX:

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

La valeur par défaut de la variable ORA_SDTZ est 'OD_TZ'. Cette valeur est utilisée lorsque la variable n’est pas définie ou qu’elle est définie sur une valeur non valide.

L’instruction ALTER SESSION

Vous pouvez modifier le fuseau horaire d’une session SQL spécifique avec la clause SET TIME_ZONE de l’instruction ALTER SESSION.

TIME_ZONE peut être réglé sur les valeurs suivantes:

  • Fuseau horaire local par défaut au démarrage de la session (local)
  • Fuseau horaire de la base de données (dbtimezone)
  • Décalage absolu par rapport à UTC (p. ex. '-04:00')
  • Nom de la région du fuseau horaire (p. ex. 'Canada/Eastern')

Voici un exemple de définition de TIME_ZONE à de telles valeurs:

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';

Vous pouvez vérifier le fuseau horaire de votre session en cours avec la fonction SESSIONTIMEZONE.

Exemple:

SELECT SESSIONTIMEZONE FROM DUAL;

Résultat:

Australia/Brisbane 

Dans mon cas, le fuseau horaire de la session est défini sur Australie / Brisbane.

La clause AT TIME ZONE

Une expression datetime peut inclure une clause AT LOCAL ou une clause AT TIME ZONE. Si vous incluez une clause AT LOCAL, le résultat est renvoyé dans le fuseau horaire de la session en cours. Si vous incluez la clause AT TIME ZONE, le fuseau horaire peut être l’un des suivants:

  • Un décalage de fuseau horaire
  • Un nom de région de fuseau horaire
  • DBTIMEZONE ( cette fonction renvoie le fuseau horaire de la base de données)
  • SESSIONTIMEZONE ( cette fonction renvoie le fuseau horaire de la session en cours)
  • Une expression qui renvoie une chaîne de caractères avec un format de fuseau horaire valide.

Exemple:

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

Résultat:

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

Dans ce cas, j’ai utilisé la fonction FROM_TZ() pour convertir une valeur d’horodatage et un fuseau horaire en une valeur TIMESTAMP WITH TIME ZONE. J’ai ensuite utilisé la clause AT TIME ZONE pour spécifier un fuseau horaire différent.

Voici le même exemple, sauf que cette fois je précise AT LOCAL:

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

Résultat :

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

Leave a Reply

Votre adresse e-mail ne sera pas publiée.