Dans Oracle Database, le CURRENT_TIMESTAMP()
La fonction 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
.
C'est similaire à LOCALTIMESTAMP
, sauf que LOCALTIMESTAMP
renvoie un TIMESTAMP
valeur.
Syntaxe
La syntaxe ressemble à ceci :
CURRENT_TIMESTAMP [ (precision) ]
Où la precision
facultative L'argument spécifie la précision en fraction de seconde de la valeur de temps renvoyée.
Lors de l'appel de la fonction sans argument, les parenthèses doivent être omises.
Exemple
Voici un exemple d'appel de la fonction sans spécifier la précision :
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Résultat :
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Cet exemple affiche la date dans un format basé sur la valeur du NLS_DATE_FORMAT
de mon système paramètre (qui est actuellement DD/MON/RR
). Ce paramètre tire sa valeur du NLS_TERRITORY
paramètre (dont le mien est AUSTRALIA
).
Nous avons la possibilité de modifier ces paramètres (par exemple, voir Comment modifier le format de date dans votre session Oracle).
Alternativement, nous pouvons utiliser une fonction comme TO_CHAR()
pour renvoyer le résultat dans un format différent.
Exemple :
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Résultat :
2021-08-06 08:44:39
Précision
Voici un exemple qui spécifie la précision. Ce détermine la précision à la fraction de seconde de la valeur temporelle renvoyée.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Résultat :
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Notez que l'argument précision doit être un nombre compris entre 0 et 9.
Voici ce qui se passe lorsque nous transmettons une valeur en dehors de cette plage :
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP(10) FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.
Omettre les parenthèses sans spécifier de précision
Comme mentionné, lors de l'appel de CURRENT_TIMESTAMP
sans passer la precision
argument, vous devez omettre les parenthèses.
Voici ce qui se passe lorsque nous incluons les parenthèses sans spécifier la précision :
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP() FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.
Nous obtenons la même erreur que dans l'exemple précédent. Oracle Database recherche un argument de précision entre 0 et 9, mais nous n'en avons passé aucun.
Argument nul
La même erreur se produit lors du passage de null
:
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT CURRENT_TIMESTAMP(null) FROM DUAL Error at Command Line : 1 Column : 26 Error report - SQL Error: ORA-30088: datetime/interval precision is out of range 30088. 00000 - "datetime/interval precision is out of range" *Cause: The specified datetime/interval precision was not between 0 and 9. *Action: Use a value between 0 and 9 for datetime/interval precision.