Krug Markus.de

IT Business Consulting

Schlagwort: Sysdate

Oracle Datenbanktrigger für einen Datumseintrag per PL/SQL auf eine Tabelle erstellen

Wenn ein Datenbankeintrag in einer Oracle Datenbank Tabelle erfolgt, soll gleichzeitig in einem Datumsfeld das aktuelle Datum eingetragen werden. Das bedeutet, wenn über ein Insert-Befehl Daten in einer Tabelle eingetragen werden soll, soll  zusätzlich zu gleichen Zeit das aktuelle Datum in das Datumsfeld eingetragen werden.

Dazu muß einen Trigger per Skriptsprache in den Schema erstellt werden, indem sich die Tabelle befindet auf der der Trigger abgesetzt werden soll. Um einen Trigger für das Datum kompilieren zu können muß zunächst eine weitere Spalte in der betreffenden Tabelle im Format „date“ erstellt werden.

Die Syntax für einen Trigger in der Skriptsprache PL/SQL für Oracle, der das aktuelle Datum eintragen soll lautet:

[sql]Create or Replace
TRIGGER "Schema".Triggername before insert on Tabellenname for each row
begin
select sysdate into :new.Spaltenname from dual;
exception
when others then
null;
end;[/sql]

Anschließend muß der Trigger kompiliert werden, damit dieser aktiv wird. Ab jetzt wird bei jedem Insert Eintrag automatisch das aktuelle Datum eingetragen.

Bei diesem Skript ist zu beachten, das das Datums-Format aus den Systemeinstellungen des Oracle Datenbankservers übernommen werden. Diese Problematik wurde hier schon beschrieben.

Um dieses Problem von vornherein zu umgehen, ändert man das Skript folgendermaßen:

[sql]Create or Replace
TRIGGER "Schema".Triggername before insert on Tabellenname for each row
begin
select to_date(sysdate,’dd.mm.yy‘) into :new.Spaltenname from dual;
exception
when others then
null;
end;[/sql]

Diese „to_date“ Syntax hat mein Kollege und Freund Bernhard Liebenhoff erarbeitet.

Oracle Sysdate Wert aus einer Datumsspalte per SQL auslesen

Folgendes Problem:

Ich möchte aus einer Oracle Datenbank einen Wert aus einer Datumsspalte auslesen. Dieser Wert wurde über einen Datenbank-Trigger mittels Sysdate ( Oracle Datenbank Funktion : aktuelles Datum) in die Datumsspalte eingetragen.

Wenn man nun über:

[sql]Select (Spalte) from Tabellenname where Datumsspalte = ‚26.05.11‘[/sql]

Daten selektieren möchte, werden  keine Daten angezeigt, da keine Daten mit diesem Datum gefunden werden.

Das Problem besteht darin, das Oracle in diesem Fall ( hiesige Systemeinstellungen)  selbst das Datum über Sysdate im Format

[sql]dd/mm/yy:hh:mi:ssam[/sql]

übergibt. Wir sehen zwar in der in der Spalte das Format:

dd.mm.yy

aber selektieren müssten wir über

[sql]dd/mm/yy:hh:mi:ssam[/sql]

Ich möchte aber das Format dd.mm.yy selektieren.

Um dies zu bewerkstelligen muß ich folgende Syntax in SQL anwenden:

[sql]Select Spalte from Tabellenname where TO_Date(Datumsspalte,’dd.mm.yy‘)=’26.05.11′[/sql]

Wenn ich jetzt über einen Zeitraum Daten selektieren möchte muß folgende Sysntax angewendet werden:

[sql]Select Spalte from Tabellenname where Datumsspalte between to_date(‚24.05.11′,’dd.mm.yy‘) and to_date(‚26.05.11′,’dd.mm.yy‘)[/sql]

.

Präsentiert von WordPress & Theme erstellt von Anders Norén