Announcement

Collapse
No announcement yet.

Wie einen Trigger erstellen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie einen Trigger erstellen?

    Hallo,

    ich habe eine Adressdatenbank auf 6 Tabellen aufgeteilt und über 1:1 Relationen verbunden. Jeder DS erstreckt sich also über 6 Tabellen.
    Da ein neuer Eintrag nur auf der Haupttabelle angelegt werden muss, wird hier eine ID-Nr., als Primärschlüssel vergeben. Dieselbe ID soll in den anderen 5 Tabellen als Fremdschlüssel dienen und muss da also auch angelegt werden.
    Wenn ich in Tabelle 1 einen neuen Benutzer anlege, dann möchte ich über einen Trigger dieselbe ID auch in die anderen 5 Tabellen schreiben. Geht das, und wie mache ich das? Was muss in dem Trigger stehen?

    Gruss
    Klaus

  • #2
    Hallo Klaus,

    ja das geht! Du kannst einen After-Statement Trigger verwenden (CREATE TRIGGER <i>triggername</i> AFTER INSERT ON <i>tabellenname</i> ...
    Innerhalb von Before- und After-Statementtriggern kannst du mit den Variablen :NEW und :OLD auf die Neuen und Alten Werte zugreifen. (Für Insert gilt natürlich nur :NEW)
    Du kannst in dem Trigger deine 5 anderen INSERTs absetzen und dort jeweils :NEW.<i>id_feldname</i> für den Fremdschlüssel übergeben.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Würde das dann so aussehen für die Tabelle tblPERSI?

      AFTER
      INSERT OF ID_PERSN ON myuser.tblPERSN
      NEW AS ID_PERSN

      BEGIN
      Insert into tblPERSI
      Values (ID_PERSI := new.ID_PERSN,,,,,,);
      .....
      END;

      Die anderen Spalten sollen nicht geschrieben werden.
      Gruss
      Klaus

      BTW: Ich hätte den Trigger der einen Insert in die Tabelle PERSN schreibt jetzt an die Tabelle PERSI gebunden, weil da das Ereignis (neuer DS) auftritt. Oder muss der Trigger doch an die andere Tabelle

      Comment


      • #4
        Hallo Klaus,

        das ist nicht ganz richtig!

        Ich gehe davon aus, die Tabelle myuser.tblPERSN ist die <b>Haupttabelle </b> und tblPERSI soll den Fremdschlüsseleintrag enthalten. Dann muß der Trigger so angelegt werden:
        <br />
        CREATE OR REPLACE TRIGGER <i>triggername</i>
        AFTER INSERT ON myuser.tblPERSN
        BEGIN
        INSERT INTO tblPERSI (ID_PERSI)
        VALUES (:NEW.ID_PERSN);
        ...
        END;
        <br />
        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Danke das versuch ich ma

          Comment


          • #6
            Die Pseudospalten NEW und OLD können nur in Zeilentriggern verwendet werden!

            kuemmelche

            Comment


            • #7
              uuups ... ist natürlich richtig - muß also so aussehen :<br>
              CREATE OR REPLACE TRIGGER triggername
              AFTER INSERT ON myuser.tblPERSN <b>FOR EACH ROW</b>
              BEGIN
              INSERT INTO tblPERSI (ID_PERSI)
              VALUES (:NEW.ID_PERSN);
              ...
              END
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hm, also für eine Tabelle funktioniert es schon:
                ----
                CREATE OR REPLACE TRIGGER "tblPERSN_T1"
                AFTER
                insert on "tblPERSN"
                for each row
                begin
                BEGIN
                INSERT INTO MYUSER.tblPERSI (ID_PERSI)
                VALUES (:NEW.ID_PERSN);
                END;
                end;
                ----
                aber das gleiche für 2 Tabellen haut nicht hin, da kriege ich die Fehlermeldung table or view does not exist:
                ----
                CREATE OR REPLACE TRIGGER "tblPERSN_T2"
                AFTER
                insert or update or delete on "tblPERSN"
                for each row
                begin
                INSERT INTO MYUSER.tblPERSI (ID_PERSI)
                VALUES (:NEW.ID_PERSN);
                INSERT INTO MYUSER.tblKOMMN (ID_KOMMN)
                VALUES (:NEW.ID_PERSN);
                end;
                ----
                Dabei ist das doch genau das gleiche?? (die Tabellen- und Schemanamen stimmen)

                Comment


                • #9
                  Danke, das funktioniert :-

                  Comment

                  Working...
                  X