V databázi Oracle je to CURRENT_TIMESTAMP()
funkce vrací aktuální datum a čas v časovém pásmu relace v hodnotě datového typu TIMESTAMP WITH TIME ZONE
.
Je to podobné jako LOCALTIMESTAMP
, kromě LOCALTIMESTAMP
vrátí TIMESTAMP
hodnotu.
Syntaxe
Syntaxe vypadá takto:
CURRENT_TIMESTAMP [ (precision) ]
Kde je volitelná precision
argument určuje zlomkovou sekundovou přesnost vrácené časové hodnoty.
Při volání funkce bez argumentu musí být závorky vynechány.
Příklad
Zde je příklad volání funkce bez určení přesnosti:
SELECT CURRENT_TIMESTAMP
FROM DUAL;
Výsledek:
06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE
Tento příklad zobrazuje datum ve formátu založeném na hodnotě NLS_DATE_FORMAT
mého systému parametr (který je aktuálně DD/MON/RR
). Tento parametr odvozuje svou hodnotu z NLS_TERRITORY
parametr (z toho můj je AUSTRALIA
).
Máme možnost tyto parametry změnit (například viz Jak změnit formát data ve vaší Oracle Session).
Případně můžeme použít funkci jako TO_CHAR()
vrátit výsledek v jiném formátu.
Příklad:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
Výsledek:
2021-08-06 08:44:39
Přesnost
Zde je příklad, který specifikuje přesnost. Tento určuje přesnost vrácené časové hodnoty ve zlomcích sekund.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;
Výsledek:
06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE
Všimněte si, že argument přesnosti musí být číslo mezi 0 a 9.
Co se stane, když předáme hodnotu mimo tento rozsah:
SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;
Výsledek:
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.
Vynechání závorek bez zadání přesnosti
Jak již bylo zmíněno, při volání CURRENT_TIMESTAMP
bez předání precision
argument, musíte vynechat závorky.
Když zahrneme závorky bez určení přesnosti, stane se toto:
SELECT CURRENT_TIMESTAMP()
FROM DUAL;
Výsledek:
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.
Dostaneme stejnou chybu jako v předchozím příkladu. Oracle Database hledá argument přesnosti mezi 0 a 9, ale žádný jsme neprošli.
Nulový argument
Ke stejné chybě dochází při předávání null
:
SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;
Výsledek:
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.