SYSDATE vs CURRENT_DATE
SYSDATE è una funzione di Single-Row che non richiede argomenti. Restituisce l'attuale data e l'ora del sistema operativo su cui risiede il database. Il tipo di dato restituito è DATE e il formato restituito dipende dal valore del parametro di inizializzazione NLS_DATE_FORMAT. Non è possibile utilizzare questa funzione nella costraint di tipo CHECK.
CURRENT_DATE restituisce la data corrente della sessione nella time zone definita secondo il calendario Gregoriano.
select SYSDATE, CURRENT_DATE from DUAL;
11-12-2013 09:25:44 11-12-2013 09:25:44
Utiliziamo le funzioni DBTIMEZONE e SESSIONTIMEZONE per visualizzare il valore "Time Zone" del Database e della Sessione.
select DBTIMEZONE, SESSIONTIMEZONE from DUAL;
+00:00 +01:00
+00:00 Europe/Berlin
Modifichiamo il valore "Time Zone" della sessione.
ALTER SESSION SET TIME_ZONE = '-8:0';
oppure
ALTER SESSION SET TIME_ZONE = 'America/Los_Angeles';
select DBTIMEZONE, SESSIONTIMEZONE from DUAL;
+00:00 -08:00
+00:00 America/Los_Angeles
A questo punto le due date sono diverse:
select SYSDATE , CURRENT_DATE from DUAL;
11-12-2013 09:26:44 11-12-2013 00:26:45
Time Zone Region e Time Zone Offset
Vista del Dizionario Dati che contiene il nome del "Time Zone" e la corrispondente abbreviazione:
select * from V$TIMEZONE_NAMES where tzname like 'America/Los%';
La funzione TZ_OFFSET restituisce il valore "time zone offset".
SELECT TZ_OFFSET('America/Los_Angeles')FROM dual;
-08:00