I Oracle Database, CURRENT_TIMESTAMP()
funktion returnerar aktuellt datum och tid i sessionens tidszon, i ett värde av datatypen TIMESTAMP WITH TIME ZONE
.
Det liknar LOCALTIMESTAMP
, förutom att LOCALTIMESTAMP
returnerar en TIMESTAMP
värde.
Syntax
Syntaxen ser ut så här:
CURRENT_TIMESTAMP [ (precision) ]
Där den valfria precision
argument anger bråkdelssekunderprecisionen för det returnerade tidsvärdet.
När funktionen anropas utan argument måste parentesen utelämnas.
Exempel
Här är ett exempel på att anropa funktionen utan att specificera precisionen:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Resultat:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Det här exemplet visar datumet i ett format baserat på värdet av mitt systems NLS_DATE_FORMAT
parameter (som för närvarande är DD/MON/RR
). Denna parameter får sitt värde från NLS_TERRITORY
parameter (varav min är AUSTRALIA
).
Vi har möjlighet att ändra dessa parametrar (se till exempel Hur du ändrar datumformatet i din Oracle-session).
Alternativt kan vi använda en funktion som TO_CHAR()
för att returnera resultatet i ett annat format.
Exempel:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Resultat:
2021-08-06 08:44:39
Precision
Här är ett exempel som anger precisionen. Denna bestämmer bråkdelssekunderprecisionen för det returnerade tidsvärdet.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Resultat:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Observera att precisionsargumentet måste vara ett tal mellan 0 och 9.
Så här händer när vi skickar ett värde utanför det intervallet:
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Resultat:
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.
Utesluter parenteserna utan att specificera precision
Som nämnts, när du ringer CURRENT_TIMESTAMP
utan att klara precision
argument måste du utelämna parenteserna.
Här är vad som händer när vi inkluderar parenteserna utan att specificera precisionen:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Resultat:
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.
Vi får samma fel som i föregående exempel. Oracle Database letar efter ett precisionsargument mellan 0 och 9, men vi klarade inget.
Nollargument
Samma fel uppstår när null
skickas :
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Resultat:
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.