Pular para o conteúdo

Funções CURRENT_DATE e SYSDATE: Saiba a diferença e como utilizá-las corretamente

Diferença entre Current_Date e Sysdate no Oracle

No Oracle existem algumas unções conhecidas com built-in. Essas funções são funções pré-definidas pelo RDBMS Oracle, ou seja não necessitam ser implementadas manualmente pelo usuário.

Dentre as funções Built-in mais conhecidas temos as funções numéricas como SUM, AVG, VARIANCE, STDDEV, MOD e muitas outras funções capazes de ajudar na manipulação de caracteres numéricos.

Existem também as funções gerais e de strings que são utilizadas, respectivamente para  manipular valores nulos e string de caracteres.

Mas neste artigo iremos tratar á respeito de funções de Data e hora, mas especificamente das funções CURRENT_DATE e SYSDATE.

Esses dias me deparei com a possibilidade de utilizar a função CURRENT_DATE,sendo que estou acostumado a utilizar a função SYSDATE, então para entender a diferença entre as duas realizei a seguinte consulta no banco:

SELECT CURRENT_DATE, SYSDATE 
FROM dual;

E o resultado foi diferente, mas como, se as duas implicam em retornar a data e hora correntes?

O motivo se deve ao fato de:

A função CURRENT_DATE pega a data e hora de acordo com o TIME ZONE da sessão que está a utilizando, de acordo com os padrões configurados pela localização do DB da sessão.

Já o Sysdate pega a data e hora de acordo com o Servidor Oracle.

Como amenizar as chances de diferenças??

Para poder deixar as duas funções com os mesmos dados de retorno, basta alterar a sessão corrente utilizando o com ALTER e igualar o TIME_ZONE ao TIME_ZONE do BD, dessa forma:

ALTER SESSION SET time_zone = dbtimezone;

Mas realizando a conulta novamente, veremos que ainda os valores continuam diferentes em se tratando da hora:

SELECT current_date, SYSDATE
FROM dual;

-->    05.12.2013 13:30:50  //// 05.12.2013 14:30:49

Então devemos configurar a sessão para que o horário também seja o mesmo que o do TZ do BD, dessa forma:

ALTER SESSION SET time_zone = 'Brasil/East';

No meu caso seria Brazil/East, mas você, leitor, pode estar em outro time_zone nesse caso, digite a consulta a baixo para ver os nomes de TZ possiveis:

SELECT TZABBREV, TZNAME
FROM V$TIMEZONE_NAMES;

Por fim, para analizar se está correto o retorno das duas funções consulte de novo:

SELECT current_date, SYSDATE
FROM dual;

05.12.2013 14:32:51 //  05.12.2013 14:32:51

Considerações Finais

Feito dessa forma, teoricamente não se terá problemas em usar tanto uma quanto a outra função, mas é aconselhável que se utilize a função SYSDATE, afim de que, não haja possibilidade de se confundir, a não ser que seja um caso específico.

Geraldo Ferreira Viana Junior

Geraldo Ferreira Viana Junior

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress