Krug Markus.de

Solution Architect & IT Business Consulting

Schlagwort: Trigger

Automatischer Eintrag einer eindeutigen ID in einer Oracle Datenbanktabelle


Generell sollten Datensätze in einer Datenbanktabelle eindeutig sein, um sie später genau zu selektieren. Eine Eindeutigkeit kann durch eine eindeute ID gewährleistet werden.
Um in einer Oracle Datenbank automatisch bei jedem Datenbankeintrag eine eindeutige fortlaufende Id zu generieren, muss dafür eine Sequenz und ein Trigger für die entsprechende Datenbanktabelle in der Skriptsprache PL/SQL erstellt bzw. kompiliert werden.

In einer Sequenz wird  eine Zahl unter definierten Bedingungen generiert. Diese Bedingungen können den Startwert, Minwert, einen Maxwert und Erhöhungschritt (Inkrementschritt) sein.

Um nun einen generierten Wert in einer dafür bestimmten Spalte in der Tabelle eintragen zu können muss neben der Sequenz auch ein Trigger kompiliert werden. Als erstes muss aber die Sequenz kompiliert werden, bevor der dazugehörige Trigger kompiliert werden kann.

Die Syntax zum erstellen einer Sequenz lautet.

[sql]
CREATE SEQUENCE "Schema"."Sequenzname"
MINVALUE 1
MAXVALUE 999999999999999999999999999
INCREMENT BY 1
START WITH 1
CACHE 20
NOORDER
NOCYCLE ;
[/sql]

Nach erfolgreichem kompilieren der Sequenz kann der Trigger erstellt werden.

Die dazugehörige Syntax lautet:

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

.

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.

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