sql >> Base de Datos >  >> RDS >> Oracle

Función CURRENT_TIMESTAMP() en Oracle

En Oracle Database, el CURRENT_TIMESTAMP() La función devuelve la fecha y hora actual en la zona horaria de la sesión, en un valor de tipo de datos TIMESTAMP WITH TIME ZONE .

Es similar a LOCALTIMESTAMP , excepto que LOCALTIMESTAMP devuelve un TIMESTAMP valor.

Sintaxis

La sintaxis es así:

CURRENT_TIMESTAMP [ (precision) ]

Donde la precision opcional El argumento especifica la precisión de fracciones de segundo del valor de tiempo devuelto.

Al llamar a la función sin un argumento, se deben omitir los paréntesis.

Ejemplo

Aquí hay un ejemplo de cómo llamar a la función sin especificar la precisión:

SELECT CURRENT_TIMESTAMP
FROM DUAL;

Resultado:

06/AUG/21 08:32:31.165866000 AM AUSTRALIA/BRISBANE

Este ejemplo muestra la fecha en un formato basado en el valor de NLS_DATE_FORMAT de mi sistema parámetro (que actualmente es DD/MON/RR ). Este parámetro deriva su valor del NLS_TERRITORY parámetro (de los cuales el mío es AUSTRALIA ).

Tenemos la opción de cambiar estos parámetros (por ejemplo, vea Cómo cambiar el formato de fecha en su sesión de Oracle).

Alternativamente, podemos usar una función como TO_CHAR() para devolver el resultado en un formato diferente.

Ejemplo:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

Resultado:

2021-08-06 08:44:39

Precisión

Aquí hay un ejemplo que especifica la precisión. Este determina la precisión de fracciones de segundo del valor de tiempo devuelto.

SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;

Resultado:

06/AUG/21 09:02:37.868264000 AM AUSTRALIA/BRISBANE

Tenga en cuenta que el argumento de precisión debe ser un número entre 0 y 9.

Esto es lo que sucede cuando pasamos un valor fuera de ese rango:

SELECT CURRENT_TIMESTAMP(10)
FROM DUAL;

Resultado:

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.

Omitir los paréntesis sin especificar la precisión

Como se mencionó, al llamar a CURRENT_TIMESTAMP sin pasar la precision argumento, debe omitir los paréntesis.

Esto es lo que sucede cuando incluimos los paréntesis sin especificar la precisión:

SELECT CURRENT_TIMESTAMP()
FROM DUAL;

Resultado:

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.

Obtenemos el mismo error que en el ejemplo anterior. Oracle Database está buscando un argumento de precisión entre 0 y 9, pero no pasamos ninguno.

Argumento nulo

El mismo error ocurre al pasar null :

SELECT CURRENT_TIMESTAMP(null)
FROM DUAL;

Resultado:

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.