In Oracle Database, il LOCALTIMESTAMP()
La funzione restituisce la data e l'ora correnti nel fuso orario della sessione in un valore di tipo di dati TIMESTAMP
.
È simile a CURRENT_TIMESTAMP
, tranne che CURRENT_TIMESTAMP
restituisce un TIMESTAMP WITH TIME ZONE
valore.
Sintassi
La sintassi è questa:
LOCALTIMESTAMP [ (timestamp_precision) ]
Dove il timestamp_precision
facoltativo argomento specifica la precisione frazionaria di secondo del valore di tempo restituito.
Quando si chiama la funzione senza un argomento, le parentesi devono essere omesse.
Esempio
Ecco un esempio di chiamata della funzione senza specificare la precisione:
SELECT LOCALTIMESTAMP
FROM DUAL;
Risultato:
07/AUG/21 08:49:50.026443000 AM
Questo esempio mostra la data in un formato basato sul valore di NLS_DATE_FORMAT
del mio sistema parametro (che è attualmente DD/MON/RR
). Questo parametro deriva il suo valore da NLS_TERRITORY
parametro (di cui il mio è AUSTRALIA
).
Abbiamo la possibilità di modificare questi parametri (ad esempio, vedere Come modificare il formato della data nella sessione Oracle).
In alternativa, possiamo usare una funzione come TO_CHAR()
per restituire il risultato in un formato diverso.
Esempio:
SELECT TO_CHAR(LOCALTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Risultato:
2021-08-07 08:50:20
Precisione
Ecco un esempio che specifica la precisione. Questo determina la precisione frazionaria di secondo del valore di tempo restituito.
SELECT LOCALTIMESTAMP(9)
FROM DUAL;
Risultato:
07/AUG/21 08:50:47.203717000 AM
Nota che l'argomento precision deve essere un numero compreso tra 0 e 9.
Ecco cosa succede quando passiamo un valore al di fuori di tale intervallo:
SELECT LOCALTIMESTAMP(10)
FROM DUAL;
Risultato:
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.
Omissione delle parentesi senza specificare la precisione
Come accennato, quando si chiama LOCALTIMESTAMP
senza superare la precision
argomento, devi omettere le parentesi.
Ecco cosa succede quando includiamo le parentesi senza specificare la precisione:
SELECT LOCALTIMESTAMP()
FROM DUAL;
Risultato:
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.
Otteniamo lo stesso errore dell'esempio precedente. Oracle Database sta cercando un argomento di precisione compreso tra 0 e 9, ma non ne abbiamo passato nessuno.
Argomento nullo
Lo stesso errore si verifica quando si passa null
:
SELECT LOCALTIMESTAMP(null)
FROM DUAL;
Risultato:
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.