Trigger

Xpisto

Neuer Benutzer
Beiträge
4
Hallo liebe Leute, ich wollte mal fragen ob mir jemand diesen Trigger schreiben könnte, da es Tei der Datenbank Prüfung an der Uni sein wird, und ich ein gutes Beispiel brauche um mich intensiv damit zu befassen und davon ausgehen kann dass esrichtig ist. Würde mich freuen wenn sich jemand bereit erklärt diese Aufgabe zu lösen :)
Ein Eintrag in die Tabelle Vorlesungsangebot darf nur unter folgenden Voraussetzungen erfolgen:
-in einem Semester darf ein Dozent höchstens vier Vorlesungen anbieten,
-in einem Semester darf ein Dozent höchstens zwei neue Vorlesungen anbietet, d.h. Vorlesunge, die er bislang noch nicht gehalten hat,
in einem Semester reduzieren sich die Anzahl der Vorlesungen, die ein Dozent anbieten darf, mit jeder für ihn neuen (d.h. noch nicht gehaltenen) Vorlesung um 1.

Ich danke euch jetzt schon vielmals :)

Grüße Xpisto!
 
Werbung:
Ersten wird es leider bereits zu spät sein. (bezgl. Prüfung)

Desweiteren wäre ein ERD sehr hilfreich, denn so kann ich keinen Triggercode zur Verfügung stellen.

Lg
 
Hi kann mir jemand helfen, diesen Trigger zu lösen: ?

-Entwickeln Sie eine Triggerlösung, die beim Einfügen und Ändern immer das Datum (SYSDATE) bzw.
die Benutzerkennung (USER) der aktuell einfügenden bzw. ändernden Person in die obigen Spalten
einträgt.(Die Spalten heißen: eingefuegt_am,eingefuegt_von,geaendert_am,geaendert_von und befinden sich in der Tabelle "IsMember_loc")
 
Also das funktioniert nicht:
CREATE OR REPLACE TRIGGER ui after
update OR INSERT
ON ISMEMBER_loc
for each row
BEGIN
IF inserting THEN
-- INSERT INTO ISMEMBER_LOC(eingefuegt_am,eingefuegt_von)
--VALUES(Sysdate,USER);
:new.eingefuegt_am := sysdate;
:new.eingefuegt_von := user;
elsif updating THEN
:new.geaendert_am := sysdate;
:new.geaendert_von := user;
:old.eingefuegt_am := null;
:old.eingefuegt_von := null;
END IF;
--Update ISMEMBER_LOC set geaendert_am = 'sysdate'
--, geaendert_von = 'user' where country = old.country;
END;
 
Hy,

Code:
CREATE OR REPLACE TRIGGER ui
AFTER INSERT OR UPDATE
ON ISMEMBER_LOC
for each row
 
DECLARE
 
BEGIN
  IF INSERTING THEN
 
    update ISMEMBER_LOC
        set eingefuegt_am = sysdate
            ,eingefuegt_von = 'user'
          where country = :new.country;
 
  ELSIF UPDATING THEN
    update ISMEMBER_LOC
        set geaendert_am = sysdate
            ,geaendert_von = 'user'
          where country = :old.country;
 
  END IF;
END ui;

müsste damit funktionieren. Probiers bitte mal aus und poste ggf. die Fehlermeldungen! Danke und Lg
 
OK!

Nach etwas Recherche habe ich den Grund der "Mutation Table" - Fehlermeldung herausgefunden.

Das Problem liegt darin, dass eine Transaktion (insert, update, delete) auf die Tabelle ISMEMBER_LOC abgesetzt wird und der Trigger anschließend auslöst.
Also wenn der Trigger nun auslöst, ist die Transaktion seiten Oracle (wg. for each row) noch nicht abgeschlossen und somit kann KEINE erneute Transaktion auf die gleiche Tabelle ISMEMBER_LOC abgesetzt werden.

vl. kann dies mit einer stored Procedure umgangen werden. (Update - Stmts) einfach in eine stored Procedure und diese im Trigger aufrufen! (habe ich wo gelesen)

Oder etwas, was sicher funktioniert ist, eine Temporäre Tabelle anzulegen und in diese die neuen Daten (user, geaendert_am, country) zu inserten, und anschließend von dieser zurück in die ursprüngliche Tabelle Updaten.

Hoffe das hilft! Lg
 
Jetz muss ich diese aufgabe machen :-( :

"Im 1. Praktikum Aufgabe 3c) haben Sie bereits eine Aktualisierungsprozedur für die Spalte Number-
OfMembers der die Tabelle Organization_loc programmiert. Verwenden Sie diese nun für die Aufgabenstellung
hier. Programmieren Sie für folgende Folgeverarbeitung eine entsprechende Triggerlösung
und testen Sie diese ausführlich.
Immer, wenn ein Staat einer Organisation beitritt oder aus ihr austritt, was in der Tabelle IsMember_
loc verzeichnet wird, soll die Spalte NumberOfMembers aktualisiert werden.
Ebenfalls wird die Spalte aktualisiert, wenn für ein Land die zugehörige Organisation geändert wird."
hehe..
 
Hy,

wenn ich das richtig verstanden habe sollte es damit gehen.

Hast du eine genauere Beschreibung der beiden Tabellen?

Code:
CREATE OR REPLACE TRIGGER NumberOfMembers_trigg
AFTER INSERT OR UPDATE OR DELETE
ON ISMEMBER_LOC
for each row
 
DECLARE

v_count NUMBER DEFAULT 0;

 BEGIN
 
    select count(*) INTO v_count from ISMEMBER_LOC; --Zähl ab, wieviele Länder nun dabei sind!

    NumberOfMembers(v_count);  --Aktualisierungsprozedur, welche bereits FERTIG ist!
 
END NumberOfMembers_trigg;

Lg
 
Werbung:
Zurück
Oben