1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Trigger

Dieses Thema im Forum "Oracle" wurde erstellt von Xpisto, 28 Januar 2011.

  1. Xpisto

    Xpisto Neuer Benutzer

    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 :)
    Ich danke euch jetzt schon vielmals :)

    Grüße Xpisto!
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    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
     
  3. pl/sql

    pl/sql Benutzer

    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")
     
  4. pl/sql

    pl/sql Benutzer

    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;
    :eek:ld.eingefuegt_am := null;
    :eek:ld.eingefuegt_von := null;
    END IF;
    --Update ISMEMBER_LOC set geaendert_am = 'sysdate'
    --, geaendert_von = 'user' where country = old.country;
    END;
     
  5. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    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
     
    ukulele und Walter gefällt das.
  6. pl/sql

    pl/sql Benutzer

    Hy,
    ok mache ich danke :)
    Lg
     
  7. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Und hat der Trigger funktioniert?

    Lg
     
  8. pl/sql

    pl/sql Benutzer

    Ne, hat er nicht funktioniert ...
    Und da ist noch einen Mutationg-Table...

    Lg
     
  9. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    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
     
    dennisshark und Walter gefällt das.
  10. dennisshark

    dennisshark Neuer Benutzer

    Nicht so elegant, aber das mit der Temporären Tabelle geht immer - mann oh mann und das für nen Uni-Test...wie isses denn gelaufen?
     
  11. pl/sql

    pl/sql Benutzer

    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..
     
  12. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    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
     
  13. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hat dir dies geholfen?
     
Die Seite wird geladen...

Diese Seite empfehlen