web-dev-qa-db-fra.com

CURRENT_TIMESTAMP et SYSDATE différents dans Oracle

Après avoir exécuté ce SQL dans Oracle 10g:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL

Je reçois cette sortie étrange: Toad output for query

Quelle est la cause de la différence de temps? L'heure du serveur est égale à la valeur SYSDATE

40
Mohsen Kashi

CURRENT_DATE et CURRENT_TIMESTAMP renvoie la date et l'heure actuelles dans le fuseau horaire de la session.

SYSDATE et SYSTIMESTAMP retourne la date et l'heure du système, c'est-à-dire du système sur lequel réside la base de données.

Si votre session client ne correspond pas au fuseau horaire correspondant au serveur sur lequel se trouve la base de données (ou indique que ce n'est pas le cas, via vos paramètres NLS), le fait de mélanger les fonctions SYS* et CURRENT_* donnera des valeurs différentes. Ils sont tous corrects, ils représentent simplement des choses différentes. Il semble que votre serveur se trouve (ou le pense) dans un fuseau horaire +4: 00, alors que votre session client est dans un fuseau horaire +4: 30.

Vous pouvez également voir de petites différences dans le temps si les horloges ne sont pas synchronisées, ce qui ne semble pas être un problème ici.

65
Alex Poole

SYSDATE, SYSTIMESTAMP renvoie la date et l'horodatage de la base de données, alors que current_date, current_timestamp renvoie la date et l'horodatage de l'emplacement depuis lequel vous travaillez.

Pour par exemple. travaillant depuis l’Inde, j’accède à une base de données située à Paris. à 16h00 IST:

select sysdate,systimestamp from dual; 

Cela me renvoie la date et l'heure de Paris:

RÉSULTAT

12-MAY-14   12-MAY-14 12.30.03.283502000 PM +02:00

select current_date,current_timestamp from dual; 

Cela me renvoie la date et l'heure de l'Inde:

RÉSULTAT

12-MAY-14   12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA

Veuillez noter le décalage horaire de 3h30.

14

SYSDATE renvoie la date système du système sur lequel réside la base de données

CURRENT_TIMESTAMP renvoie la date et l'heure actuelles dans le fuseau horaire de la session, dans une valeur de type de données TIMESTAMP WITH TIME ZONE.

exécuter cette commande

    ALTER SESSION SET TIME_ZONE = '+3:0';

et cela vous donnera le même résultat.

3
Harshit
  • SYSDATE fournit la date et l'heure d'un serveur.
  • CURRENT_DATE indique la date et l'heure du client (c'est-à-dire votre système).
  • CURRENT_TIMESTAMP fournit les données et l'horodatage d'un clinet.
1
reddy

Remarque: SYSDATE - renvoie uniquement la date, c’est-à-dire que "aaaa-mm-jj" n’est pas correct. SYSDATE renvoie la date système du serveur de base de données, y compris les heures, les minutes et les secondes. Par exemple:

SELECT SYSDATE FROM DUAL; retournera une sortie semblable à celle-ci: 12/15/2017 12:42:39 PM

0
Amir Abe