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