PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufgabe mit Trigger in PL/SQL (Oracle)



Aqualon
10.06.2004, 13:06
H!

Eine Freundin von mir musste in einer Software-Technik Klausur folgende Aufgabe lösen:



Erstellen Sie einen Trigger für folgendes Problem:
Eine Kredikartengesellschaft hat festgestellt, daß mit über 80% Wahrscheinlichkeit ein Kreditkartenbetrug vorliegt, wenn innerhalb von drei Tagen über 2.000,00 Euro von einem Konto abgebucht werden.
Jede Abbuchung soll also überprüft werden. Tritt durch eine Abbuchung der oben erwähnte Fall ein (innerhalb von 3 Tagen mehr als 2.000,-- Euro) sollen in eine Tabelle 'Kreditkarten_log' die aktuellen Daten der Abbuchung eingetragen werden. Der Tabelle 'Kreditkarten_log' liegt folgende Relation zugrunde:

Kreditkarten_log (Kartennummer, Betrag, Datum_der_Abbuchung, ID_der_abbuchenden_Institution)

Soweit die Aufgabe. Mag sein, dass ich etwas auf dem Schlauch stehe, aber so wie ich das sehe, ist die Aufgabe nicht per Trigger lösbar.

Laut der Lehrerin muss sich der Trigger auf die Tabelle 'Kreditkarten_log' beziehen. Da ist mein Kritikpunkt, dass dieser Trigger nichts von neuen Abbuchungen in die Tabelle Abbuchung erfährt (diese ist oben in der Aufgabe nicht definiert, muss es aber geben). Zusätzlich wurde in der Klausur meiner Freundin folgende Zeile als richtig abgehakt:

INSERT INTO Kreditkarten_log(Kartennummer, Betrag, Datum-der_Abbuchung, ID) usw...

Dies ist aber nicht möglich, da der Trigger von 'Kreditkarten_log' nur durch eine Änderung an 'Kreditkarten_log' ausgelöst werden kann, was diese Tabelle für jegliche SQL-Anweisungen sperrt.

Mit dem Trigger auf 'Kreditkarten_log' kann man soweit ich das sehe nicht weiterkommen.

Also schauen wir mal, was ein Trigger auf 'Abbuchung' macht. Dieser Trigger wird ausgelöst, wenn eine neue Abbuchung (also ein Eintrag in 'Abbuchung') erfolgt. Der Trigger könnte auch einen Eintrag in der Tabelle 'Kreditkarten_log' vornehmen, da diese nicht vom Abbuchungsvorgang betroffen ist.

Soweit so gut, aber in diesem Fall kann der Trigger nur auf die Daten der momentan einzutragenden Abbuchung per :new-Operator zugreifen, aber keinen SELECT auf Abbuchung machen, um feststellen zu können, ob in den letzten 3 Tagen mehr als 2000 Euro abgebucht worden sind.

Für mich heisst das, dass dieser Trigger auch nicht die gewünschte Aufgabenstellung erfüllt.

Ich persönlich hätte die Aufgabe per Stored Procedure gelöst. Diese bekommt die Abbuchungsdaten als Parameter übergeben und prüft ob inkl. der neuen Abbuchung mehr als 2000 Euro in den letzten 3 Tagen abgebucht worden sind. Ist dies der Fall trägt die Stored Procedure die Abbuchung in 'Abbuchung' ein und erstellt ausserdem einen Eintrag in 'Kreditkarten_log'. Ist dies nicht der Fall, wird einfach die Abbuchung eingetragen und die Stored Procedure danach beendet.

Ich bin kein Profi in PL/SQL und habe keine Ahnung, wie diese Aufgabenstellung per Trigger gelöst werden kann.

Weiß jemand, ob das überhaupt möglich ist und falls ja, wie?

Aqua