I Oracle Database er LOCALTIMESTAMP()
funktion returnerer den aktuelle dato og tid i sessionens tidszone i en værdi af datatypen TIMESTAMP
.
Det ligner CURRENT_TIMESTAMP
, bortset fra at CURRENT_TIMESTAMP
returnerer et TIMESTAMP WITH TIME ZONE
værdi.
Syntaks
Syntaksen ser sådan ud:
LOCALTIMESTAMP [ (timestamp_precision) ]
Hvor den valgfri timestamp_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 LOCALTIMESTAMP
FROM DUAL;
Resultat:
07/AUG/21 08:49:50.026443000 AM
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(LOCALTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Resultat:
2021-08-07 08:50:20
Nøjagtighed
Her er et eksempel, der specificerer præcisionen. Dette bestemmer brøkdelen af sekunders præcision af den returnerede tidsværdi.
SELECT LOCALTIMESTAMP(9)
FROM DUAL;
Resultat:
07/AUG/21 08:50:47.203717000 AM
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 LOCALTIMESTAMP(10)
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP(10) FROM DUAL Error at Command Line : 1 Column : 23 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 kalder LOCALTIMESTAMP
uden at bestå precision
argument, skal du udelade parenteserne.
Her er, hvad der sker, når vi inkluderer parenteserne uden at angive præcisionen:
SELECT LOCALTIMESTAMP()
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP() FROM DUAL Error at Command Line : 1 Column : 23 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 LOCALTIMESTAMP(null)
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT LOCALTIMESTAMP(null) FROM DUAL Error at Command Line : 1 Column : 23 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.