W bazie danych Oracle CURRENT_TIMESTAMP()
funkcja zwraca bieżącą datę i czas w strefie czasowej sesji, w wartości typu TIMESTAMP WITH TIME ZONE
.
Jest podobny do LOCALTIMESTAMP
, z wyjątkiem tego, że LOCALTIMESTAMP
zwraca TIMESTAMP
wartość.
Składnia
Składnia wygląda tak:
CURRENT_TIMESTAMP [ (precision) ]
Gdzie opcjonalna precision
argument określa precyzję ułamkową sekundy zwracanej wartości czasu.
Podczas wywoływania funkcji bez argumentu należy pominąć nawiasy.
Przykład
Oto przykład wywołania funkcji bez określania dokładności:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Wynik:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Ten przykład wyświetla datę w formacie opartym na wartości NLS_DATE_FORMAT
mojego systemu parametr (którym obecnie jest DD/MON/RR
). Ten parametr wywodzi swoją wartość z NLS_TERRITORY
parametr (z których mój to AUSTRALIA
).
Mamy możliwość zmiany tych parametrów (na przykład zobacz Jak zmienić format daty w sesji Oracle).
Alternatywnie możemy użyć funkcji takiej jak TO_CHAR()
aby zwrócić wynik w innym formacie.
Przykład:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Wynik:
2021-08-06 08:44:39
Precyzja
Oto przykład określający precyzję. To określa dokładność ułamkową sekundy zwracanej wartości czasu.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Wynik:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Pamiętaj, że argument precyzji musi być liczbą z przedziału od 0 do 9.
Oto, co się dzieje, gdy przekazujemy wartość spoza tego zakresu:
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Wynik:
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.
Pomijanie nawiasów bez określania dokładności
Jak wspomniano, dzwoniąc do CURRENT_TIMESTAMP
bez przekazywania precision
argument, musisz pominąć nawiasy.
Oto, co się dzieje, gdy uwzględnimy nawiasy bez określenia precyzji:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Wynik:
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.
Otrzymujemy ten sam błąd, co w poprzednim przykładzie. Oracle Database szuka argumentu precyzji z zakresu od 0 do 9, ale nie przekazaliśmy żadnego.
Argument zerowy
Ten sam błąd występuje przy przekazywaniu null
:
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Wynik:
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.