Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função CURRENT_TIMESTAMP() no Oracle


No banco de dados Oracle, o CURRENT_TIMESTAMP() A função retorna a data e hora atuais no fuso horário da sessão, em um valor do tipo de dados TIMESTAMP WITH TIME ZONE .

É semelhante a LOCALTIMESTAMP , exceto que LOCALTIMESTAMP retorna um TIMESTAMP valor.

Sintaxe


A sintaxe fica assim:
CURRENT_TIMESTAMP [ (precision) ]

Onde a precision opcional O argumento especifica a precisão fracionária de segundo do valor de tempo retornado.

Ao chamar a função sem um argumento, os parênteses devem ser omitidos.

Exemplo


Aqui está um exemplo de como chamar a função sem especificar a precisão:
SELECT CURRENT_TIMESTAMP
FROM DUAL;

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

Este exemplo exibe a data em um formato baseado no valor de NLS_DATE_FORMAT do meu sistema parâmetro (que atualmente é DD/MON/RR ). Este parâmetro deriva seu valor do NLS_TERRITORY parâmetro (dos quais o meu é AUSTRALIA ).

Temos a opção de alterar esses parâmetros (por exemplo, consulte Como alterar o formato de data em sua sessão Oracle).

Alternativamente, podemos usar uma função como TO_CHAR() para retornar o resultado em um formato diferente.

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

Resultado:
2021-08-06 08:44:39

Precisão


Aqui está um exemplo que especifica a precisão. Este determina a precisão fracionária de segundo do valor de tempo retornado.
SELECT CURRENT_TIMESTAMP(9)
FROM DUAL;

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

Observe que o argumento de precisão deve ser um número entre 0 e 9.

Veja o que acontece quando passamos um valor fora desse intervalo:
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 os parênteses sem especificar a precisão


Como mencionado, ao chamar CURRENT_TIMESTAMP sem passar a precision argumento, você precisa omitir os parênteses.

Veja o que acontece quando incluímos os parênteses sem especificar a precisão:
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.

Obtemos o mesmo erro do exemplo anterior. O Oracle Database está procurando um argumento de precisão entre 0 e 9, mas não passamos nenhum.

Argumento nulo


O mesmo erro ocorre ao passar 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.