In Oracle Database, il CURRENT_TIMESTAMP()
la funzione restituisce la data e l'ora correnti nel fuso orario della sessione, in un valore di tipo dati TIMESTAMP WITH TIME ZONE
.
È simile a LOCALTIMESTAMP
, tranne che LOCALTIMESTAMP
restituisce un TIMESTAMP
valore.
Sintassi
La sintassi è questa:
CURRENT_TIMESTAMP [ (precision) ]
Dove la precision
facoltativa 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 CURRENT_TIMESTAMP
FROM DUAL;
Risultato:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
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(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Risultato:
2021-08-06 08:44:39
Precisione
Ecco un esempio che specifica la precisione. Questo determina la precisione frazionaria di secondo del valore temporale restituito.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Risultato:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
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 CURRENT_TIMESTAMP(10)
FROM DUAL;
Risultato:
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.
Omissione delle parentesi senza specificare la precisione
Come accennato, quando si chiama CURRENT_TIMESTAMP
senza superare la precision
argomento, devi omettere le parentesi.
Ecco cosa succede quando includiamo le parentesi senza specificare la precisione:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Risultato:
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.
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 CURRENT_TIMESTAMP(null)
FROM DUAL;
Risultato:
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.