Announcement

Collapse
No announcement yet.

Trigger: Spaltenwert mit einem Trigger einfügen

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

  • Trigger: Spaltenwert mit einem Trigger einfügen

    Hallo zusammen,

    gegeben sei einmal die folgende Tabe

    Code:
    Spalte1  Spalte2
    ---------------
    1     Kap_1
    2     Kap_2
    Spalte 1 ist ein Primärschlüssel mit einem Autoincrement-Wert.

    Nun möchte ich, dass die Spalte2 immer automatisch ausgefüllt wird, und zwar nach der (erst einmal vereinfachten) Logik: Spalte2 = "Kap_" + Spalte1.

    Dazu müsste ich mir laut recherchen ein Trigger schreiben. Ich habe es wie folgt probiert:

    Code:
    CREATE TRIGGER `test`.`tab1`
    AFTER INSERT ON 
        test.tab1
    FOR EACH ROW BEGIN
        UPDATE  `test`.tab1`
        SET Spalte2 = 'Kap_' + Spalte1
        WHERE Spalte1 = SELECT LAST_INSERT_ID();
    END
    Aber der Versuch wird mir mit folgender Fehlermeldung quittiert:

    Can't update table 'tab1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    Hat jemand einen Tipp? Das Problem ist, dass erst einmal einen Datensatz abspeichern muss, damit der Datensatz vom Server eine ID (Spalte1) erhält. Diese ID will ich dann benutzen und meine Spalte2 füllen. Aber offensichtlich mag MySQL das alles nicht in einem Trigger.

    Später - aber um dieses Problem kümmere ich mich dann später - soll die Spalte2 wie folgt aussehen: Kap_xxx


    Code:
    Spalte1  Spalte2
    ---------------
    1     Kap_001
    2     Kap_002
    23   Kap_023
    123 Kap_123
    Gruß,

    Jean
    Zuletzt editiert von JeanCantos; 22.12.2009, 17:07.

  • #2
    Hi,

    irgendwie wird mir der Sinn von deiner zweiten Spalte nicht ganz klar. Sie besteht aus einem konstanten Wert "Kap_" und aus der 1. Spalte. Wozu brauchst du also überhaupt die zweite Spalte?

    Du kannst die die Daten ja ohne Probleme dynamisch bei der Abfrage erzeugen:

    [highlight=sql]
    SELECT id, CONCAT('Kap_', LPAD(id, 3, "0")) as Kapitel FROM test
    [/highlight]
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Hallo Novi,

      die zweite Spalte hatte ich eingefügt, damit ich nach dieser Spalte "richtig" sortieren kann. Mir war schon bewusst, dass ich redundante Informationen dort gespeichert habe, jedoch fehlte mir das von Dir offerierte Wissen.

      Du hast natürlich recht, deine Codezeile packe ich einfach ein einen View!

      SQL kann mitunter sehr einfach sein, wenn man weiß, wie es geht. :-)

      Werde es direkt mal probiere.

      Wünsche noch ein frohes Weihnachtsfest.

      Gruß,

      Jean

      PS: nun kommt jedoch das nächste Problem: In der Spalte Kapitel zeigt er mir als Inhalt immer "BINARY, 7Bytes" an??
      Zuletzt editiert von JeanCantos; 22.12.2009, 17:25.

      Comment


      • #4
        Hallo,
        Originally posted by JeanCantos View Post
        ...die zweite Spalte hatte ich eingefügt, damit ich nach dieser Spalte "richtig" sortieren kann.
        auch dafür ist die Spalte nicht notwendig. Da sie sich aus einem konstanten Wert und der ersten Spalte zusammensetzt, kannst du hier auch nach der ersten Spalte sortieren um die gleiche Reihenfolge zu erhalten.

        Gruß Falk
        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
          Originally posted by JeanCantos View Post
          ...PS: nun kommt jedoch das nächste Problem: In der Spalte Kapitel zeigt er mir als Inhalt immer "BINARY, 7Bytes" an??
          Welche Spalte Kapitel? Bis jetzt gibt es nur Spalte1 und Spalte2. Und wer zeigt das wann wo an?
          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


          • #6
            Hatte den Code von Novi verwendet:

            SELECT id, CONCAT('Kap_', LPAD(id, 3, "0")) AS Kapitel FROM test
            Da aber id vom Spaltentype BIGINTEGER ist, habe ich herausgefunden, dass ich diesen Type noch konvertieren muss. So funktioniert es nun:

            SELECT id, CONCAT('Kap_', LPAD(CONVERT(id, CHAR(3), 3, "0")) AS Kapitel FROM test
            Kapitel ist der Name der Spalte, die beim SELECT-Befehl erzeugt wird. Falls ich irgendwelche falsche Terminologie benutze, so bitte ich das zu entschuldigen.

            Gruß,

            Jean

            Comment

            Working...
            X