I Oracle Database er CURRENT_TIMESTAMP()
funktion returnerer den aktuelle dato og tid i sessionens tidszone i en værdi af datatypen TIMESTAMP WITH TIME ZONE
.
Det ligner LOCALTIMESTAMP
, bortset fra at LOCALTIMESTAMP
returnerer en TIMESTAMP
værdi.
Syntaks
Syntaksen ser sådan ud:
CURRENT_TIMESTAMP [ (precision) ]
Hvor den valgfri precision
argument angiver brøksekunders præcision af den returnerede tidsværdi.
Når funktionen kaldes uden argument, skal parentesen udelades.
Eksempel
Her er et eksempel på at kalde funktionen uden at angive præcisionen:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Resultat:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Dette eksempel viser datoen i et format baseret på værdien af mit systems NLS_DATE_FORMAT
parameter (som i øjeblikket er DD/MON/RR
). Denne parameter får sin værdi fra NLS_TERRITORY
parameter (hvoraf min er AUSTRALIA
).
Vi har mulighed for at ændre disse parametre (se f.eks. Sådan ændres datoformatet i din Oracle-session).
Alternativt kan vi bruge en funktion som TO_CHAR()
for at returnere resultatet i et andet format.
Eksempel:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Resultat:
2021-08-06 08:44:39
Nøjagtighed
Her er et eksempel, der specificerer præcisionen. Denne bestemmer brøkdelen af sekunders præcision af den returnerede tidsværdi.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Resultat:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Bemærk, at præcisionsargumentet skal være et tal mellem 0 og 9.
Her er, hvad der sker, når vi sender en værdi uden for dette interval:
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.
Udeladelse af parenteser uden at specificere præcision
Som nævnt, når du ringer til CURRENT_TIMESTAMP
uden at bestå precision
argument, skal du udelade parenteserne.
Her er, hvad der sker, når vi inkluderer parenteser uden at angive præcisionen:
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 samme fejl som i det foregående eksempel. Oracle Database leder efter et præcisionsargument mellem 0 og 9, men vi bestod ingen.
Nul-argument
Den samme fejl opstår, når du sender null
:
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.