Thema - bei der LISt Gesellschaft für Verkehrswesen und ...

Thema - bei der LISt Gesellschaft für Verkehrswesen und ... Thema - bei der LISt Gesellschaft für Verkehrswesen und ...

list.sachsen.de
von list.sachsen.de Mehr von diesem Publisher
20.07.2013 Aufrufe

5. Teilweiser Aufbau einer prototypischen GDI Die Aufgabe des ersten Triggers ist es, alle Datenbankoperationen (Insert, Update, Delete) auf dem View zu ermöglichen. Dies erfolgt durch die Implementierung eines Instead – of Triggers für jede dieser Operationen. Durch den in Abbildung 10 dargestellten Instead of Trigger können Einträge im View geändert werden. CREATE OR REPLACE TRIGGER Datentabelle_View_INSTOFU INSTEAD OF UPDATE ON Datentabelle_View" BEGIN END; CREATE OR REPLACE TRIGGER Datentabelle_View_INSTOFD INSTEAD OF DELETE ON Datentabelle_View" BEGIN END; UPDATE Datentabelle SET "Spalte 1" = :new. "Spalte 1" "Spalte 2" = :new. "Spalte 2" … WHERE "ID" = :old."ID"; Abbildung 10: Instead of Update Trigger des zentralen Views Der Primärschlüssel der Tabelle (in Abbildung 10 „ID“ genannt) dient hierbei als Referenz und kann nicht geändert werden. Sollte eine Änderung des Primärschlüssels notwendig sein, muss der entsprechende Datensatz gelöscht und neu angelegt werden. Um die Operation „delete“ (löschen) auf dem View zu ermöglichen, muss ein weiterer Trigger erstellt werden. Dieser soll neben der Löschung des Eintrages aus der Datentabelle ebenfalls die entsprechenden Einträge aus der Tabelle Nutzer_Daten für diesen Datensatz löschen. Ein möglicher Trigger ist in Abbildung 11 dargestellt. DELETE FROM Datentabelle WHERE "ID" = :old."ID"; DELETE FROM Nutzer_Daten WHERE "Daten_ID" = :old."ID"; Abbildung 11: Instead of Delete Trigger des zentralen Views 37

5. Teilweiser Aufbau einer prototypischen GDI Ein weiterer Instead of Trigger wird für das Einfügen neuer Datensätze in den View benötigt. Zusätzlich muss dieser, sobald ein neuer Datensatz eingefügt wurde, einen entsprechenden Eintrag in der Nutzer_Daten Tabelle erzeugen. Durch diesen Eintrag erhält der Ersteller des Datensatzes die Schreibrechte an diesem. Des Weiteren erfolgt eine einfache Fehlerabfrage, so dass keine leeren Datensätze in den Datenbestand aufgenommen werden können. Dargestellt ist ein solcher Trigger in Abbildung 12. CREATE OR REPLACE TRIGGER Datentabelle_View_INSTOFI" INSTEAD OF INSERT ON Datentabelle_View BEGIN IF ( :new."Spalte 1" IS NOT NULL AND ) THEN ELSE vollständig'); END IF; :new."Spalte 2" IS NOT NULL AND… :new."GEOM" IS NOT NULL INSERT INTO Datentabelle(Spalte1, Spalte2 …, "GEOM", "ID") VALUES(:new.Spalte1, :new.Spalte2, …, :new."GEOM", SEQ_ID_Datentabelle.NEXTVAL); INSERT INTO Nutzer_Daten(Nutzer_ID, Daten_ID) VALUES((SELECT "ID" FROM Nutzer WHERE DBAnmeldename = (SELECT user FROM dual)), SEQ_ID_Datentabelle.CURRVAL); RAISE_APPLICATION_ERROR (-20101, 'Eingabe der Daten nicht Abbildung 12: Instead of Insert Trigger des zentralen Views Zuletzt ist ein Trigger für die Einhaltung der Schreibrechte erforderlich. Im Falle eines unerlaubten Schreibzugriffes soll eine entsprechende Fehlermeldung erfolgen und eine Manipulation der Daten verhindert werden. Zu diesem Zweck prüft der Trigger vor dem möglichen Schreibzugriff die vorhandenen Schreibrechte. Sind diese vorhanden, wird der Trigger ohne weitere Abarbeitung 38

5. Teilweiser Aufbau einer prototypischen GDI<br />

Ein weiterer Instead of Trigger wird <strong>für</strong> das Einfügen neuer Datensätze in den View<br />

benötigt. Zusätzlich muss dieser, sobald ein neuer Datensatz eingefügt wurde, einen<br />

entsprechenden Eintrag in <strong>der</strong> Nutzer_Daten Tabelle erzeugen. Durch diesen Eintrag<br />

erhält <strong>der</strong> Ersteller des Datensatzes die Schreibrechte an diesem. Des Weiteren erfolgt<br />

eine einfache Fehlerabfrage, so dass keine leeren Datensätze in den Datenbestand<br />

aufgenommen werden können.<br />

Dargestellt ist ein solcher Trigger in Abbildung 12.<br />

CREATE OR REPLACE TRIGGER Datentabelle_View_INSTOFI"<br />

INSTEAD OF INSERT ON Datentabelle_View<br />

BEGIN<br />

IF ( :new."Spalte 1" IS NOT NULL AND<br />

)<br />

THEN<br />

ELSE<br />

vollständig');<br />

END IF;<br />

:new."Spalte 2" IS NOT NULL AND…<br />

:new."GEOM" IS NOT NULL<br />

INSERT INTO Datentabelle(Spalte1, Spalte2 …, "GEOM", "ID")<br />

VALUES(:new.Spalte1, :new.Spalte2, …, :new."GEOM",<br />

SEQ_ID_Datentabelle.NEXTVAL);<br />

INSERT INTO Nutzer_Daten(Nutzer_ID, Daten_ID)<br />

VALUES((SELECT "ID" FROM Nutzer WHERE DBAnmeldename =<br />

(SELECT user FROM dual)), SEQ_ID_Datentabelle.CURRVAL);<br />

RAISE_APPLICATION_ERROR (-20101, 'Eingabe <strong>der</strong> Daten nicht<br />

Abbildung 12: Instead of Insert Trigger des zentralen Views<br />

Zuletzt ist ein Trigger <strong>für</strong> die Einhaltung <strong>der</strong> Schreibrechte erfor<strong>der</strong>lich. Im Falle eines<br />

unerlaubten Schreibzugriffes soll eine entsprechende Fehlermeldung erfolgen <strong>und</strong> eine<br />

Manipulation <strong>der</strong> Daten verhin<strong>der</strong>t werden.<br />

Zu diesem Zweck prüft <strong>der</strong> Trigger vor dem möglichen Schreibzugriff die vorhandenen<br />

Schreibrechte. Sind diese vorhanden, wird <strong>der</strong> Trigger ohne weitere Abar<strong>bei</strong>tung<br />

38

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!