Oracle
 sql >> Database >  >> RDS >> Oracle

CURRENT_TIMESTAMP() Funzione in Oracle

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.