Die aktuelle Zeit in der Oracle Datenbank
Wenn es darum geht, mit SQL oder PL/SQL die aktuelle Zeit in einer Oracle Datenbank zu ermitteln, dann kommt traditionell meist die Funktionen SYSDATE bzw. SYSTIMESTAMP zum Einsatz. Jedoch kann das irreführende Ergebnisse liefern. Denn SYSDATE liefert zwar das aktuelle Datum und die aktuelle Uhrzeit, jedoch die, des Datenbanksystems. Das ist dann also im Prinzip die Zeit des Servers, auf dem die Datenbank läuft. In Normalfall laufen die Datenbanken schon lokal oder zumindest in der gleichen Zeitzone wie die Applikationen bzw. wie deren Anwender. Doch gerade mit der wachsenden Globalisierung und dem vermehrten Einsatz von Cloud-basierten Lösungen ist das nicht mehr zwingend der Fall.
Aus diesem Grund bietet die Oracle Datenbank weitere Funktionen zum ermitteln des lokalen Datums und Uhrzeit. Diese Funktionen heißen CURRENT_DATE und CURRENT_TIMESTAMP. Folgende Beispiele verdeutlichen die Wirkungsweise der Funktionen. Für das Beispiel wurde eine Datenbank eines unserer neuseeländischen Kunden verwendet. DIe Datenbank läuft in der Oracle Cloud in der Region Sydney. Betreut wird die Datenbank von unseren deutschen Kollegen. Daher ergibt sich von Deutschland aus folgendes Bild.
SQL> select property_name, property_value from database_properties where property_name like '%ZONE%';
PROPERTY_NAME PROPERTY_VALUE
-------------------- --------------------
DBTIMEZONE +02:00
SQL> select sysdate from dual;
SYSDATE
-------------------
13.02.2021 02:46:55
SQL> select current_date from dual;
CURRENT_DATE
-------------------
12.02.2021 14:46:58
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
13.02.21 02:47:17,546626 +13:00
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
12.02.21 14:47:28,395768 +01:00
Man sieht anhand dieses Beispiels deutlich den Unterschied zwischen beiden Funktionsarten. Sogar unabhängig von der in der Datenbank eingestellten Zeitzone liefern SYSDATE und SYSTIMESTAMP die neuseeländische Zeit als Ergebnis während CURRENT_DATE und CURRENT_TIMESTAMP die deutsche Zeit liefern.
Je nach Einsatzzweck ist es also dringend nötig, die jeweils richtige Funktion zum Einsatz zu bringen, damit auch das gewünschte Datum/Uhrzeit ermittelt wird.
Kommentare
Keine Kommentare