horst: trigger

Hallo zusammen,

ich habe eine Tabelle test mit den Spalten s1,s2,s3.
Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
y,z,x reingeschrieben/überschrieben werden.

Wie geht das? Kennt jemande ein gutes Tutorial zu Triggern (PL/SQL)

Viele Grüße
Horst

  1. Hallo, Horst,

    also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
    Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:

    create trigger
     trg_selfhtml
    on
     table_selfhtml
    for insert -- for insert, update
    as
     begin
     declare
      @x int,
      @y int,
      @z int
     set
      @x = (select y from Inserted)  -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
     set
      @y = (select x from inserted)
     set
      @z = (select z from inserted)
     set
      @ID = (select [ID] from inserted)  -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
     update
      table_selfhtml
     set
      x = @x,
      y = @y,
      z = @z
     where
      ([ID] = @ID)
     end

    ich habe eine Tabelle test mit den Spalten s1,s2,s3.
    Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
    wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
    soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
    Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
    y,z,x reingeschrieben/überschrieben werden.

    Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).

    Gruss,
    Lude

    1. Hallo,

      habe den Trigger jetzt hinbekommen und festgestellt:
      das geht ja gar nicht...
      ein trigger der auf ein insert reagiert und dann ein insert auf diese tabelle macht = super rekursion... :)

      trotzdem danke

      viele grüße
      horst

      Hallo, Horst,

      also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
      Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:

      create trigger
       trg_selfhtml
      on
       table_selfhtml
      for insert -- for insert, update
      as
       begin
       declare
        @x int,
        @y int,
        @z int
       set
        @x = (select y from Inserted)  -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
       set
        @y = (select x from inserted)
       set
        @z = (select z from inserted)
       set
        @ID = (select [ID] from inserted)  -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
       update
        table_selfhtml
       set
        x = @x,
        y = @y,
        z = @z
       where
        ([ID] = @ID)
       end

      ich habe eine Tabelle test mit den Spalten s1,s2,s3.
      Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
      wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
      soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
      Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
      y,z,x reingeschrieben/überschrieben werden.

      Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).

      Gruss,
      Lude

      1. Hi,

        stop. Der Trfigger macht ein UPDATE auf einen INSERT hin; keinen INSERT auf einen INSERT hin.

        Ausserdem: Selbst, wenn ein INS auf ein INS folgt, so verhindert die Standardeinstellung von MSSQL Server eine Rekursion mit nimmerwaehrendem Ende.

        Trotzdem bitte.

        Gruss,
        Lude

        Hallo,

        habe den Trigger jetzt hinbekommen und festgestellt:
        das geht ja gar nicht...
        ein trigger der auf ein insert reagiert und dann ein insert auf diese tabelle macht = super rekursion... :)

        trotzdem danke

        viele grüße
        horst

        Hallo, Horst,

        also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
        Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:

        create trigger
         trg_selfhtml
        on
         table_selfhtml
        for insert -- for insert, update
        as
         begin
         declare
          @x int,
          @y int,
          @z int
         set
          @x = (select y from Inserted)  -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
         set
          @y = (select x from inserted)
         set
          @z = (select z from inserted)
         set
          @ID = (select [ID] from inserted)  -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
         update
          table_selfhtml
         set
          x = @x,
          y = @y,
          z = @z
         where
          ([ID] = @ID)
         end

        ich habe eine Tabelle test mit den Spalten s1,s2,s3.
        Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
        wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
        soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
        Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
        y,z,x reingeschrieben/überschrieben werden.

        Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).

        Gruss,
        Lude

        "The Good the Bad and the Ugly"