В Oracle Database, CURRENT_TIMESTAMP()
функцията връща текущата дата и час в часовата зона на сесията в стойност от тип данни TIMESTAMP WITH TIME ZONE
.
Подобен е на LOCALTIMESTAMP
, с изключение на LOCALTIMESTAMP
връща TIMESTAMP
стойност.
Синтаксис
Синтаксисът е така:
CURRENT_TIMESTAMP [ (precision) ]
Където по избор precision
Аргументът указва точността на частна секунда на върнатата стойност за време.
При извикване на функцията без аргумент, скобите трябва да бъдат пропуснати.
Пример
Ето пример за извикване на функцията без уточняване на точността:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Резултат:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Този пример показва датата във формат, базиран на стойността на NLS_DATE_FORMAT
на моята система параметър (който в момента е DD/MON/RR
). Този параметър извлича стойността си от NLS_TERRITORY
параметър (от който моят е AUSTRALIA
).
Имаме възможност да променим тези параметри (например вижте Как да промените формата на датата във вашата сесия на Oracle).
Като алтернатива можем да използваме функция като TO_CHAR()
за да върнете резултата в различен формат.
Пример:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Резултат:
2021-08-06 08:44:39
Прецизност
Ето пример, който определя точността. Това определя точността на част от секундата на върнатата стойност за време.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Резултат:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Обърнете внимание, че аргументът за точност трябва да е число между 0 и 9.
Ето какво се случва, когато предадем стойност извън този диапазон:
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Резултат:
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.
Пропускане на скобите без посочване на точност
Както споменахме, при извикване на CURRENT_TIMESTAMP
без да се предава precision
аргумент, трябва да пропуснете скобите.
Ето какво се случва, когато включим скоби, без да посочим точността:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Резултат:
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.
Получаваме същата грешка като в предишния пример. Oracle Database търси аргумент за прецизност между 0 и 9, но не предадохме нито един.
Нулев аргумент
Същата грешка възниква при предаване на null
:
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Резултат:
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.