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