Krug Markus.de

Solution Architect & IT Business Consulting

Schlagwort: database

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 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