Hallo,
ich möchte aus einer OLD/NEW-Spalte einen Wert auslesen. Nun stehe ich vor dem Problem, dass meine id-Spalten wie alle meine Spalten ein Präfix haben, das tabellenspezifisch ist. Beispiel utn_id für die Tabelle utn_unternehmen oder org_id für org_organisation. Eine Funktion soll mir jetzt unabhängig von der Tabelle die aktuelle id in eine Archiv-Tabelle schreiben. Hätte ich jede id einheitlich als 'id' benannt, wäre mit NEW.id alles in Butter.
Habe ich aber nicht und deshalb muss ich einen Weg finden, den id-Wert aus NEW herauszubekommen, ohne den Tabellennamen schon hardkodiert in die Funktion zu schreiben.
Möglichkeit 1: Es gibt wie, glaube ich, bei MySQL eine Möglichkeit auf die erste Spalte zuzugreifen, so in der Art NEW.[1].
Geht meines Wissens nicht.
Möglichkeit 2: Ich ermittle aus dem Tabellennamen, der ja zugreifbar ist, den Namen der id-Spalte. Das könnte gehen, den Namen utn_id in eine Variable zu bugsieren, ist keine Schwierigkeit. Irgendwie schaffe ich es aber nicht, NEW und die Variable zu koppeln: NEW.var funktioniert nicht, aber vielleicht fehlt mir hier nur die genaue Syntax.
Möglichkeit 3: Man kann die Werte von NEW.* irgendwie in eine Array-Struktur überführen und dann auf den ersten Eintrag zugreifen. Könnte gehen, habe dazu aber nichts gefunden.
Möglichkeit 4: Man übergibt der Triggerfunktion einen passenden Parameter. Würde gehen, lieber wäre mir aber eine der ersten Varianten.
Möglichkeit 5: Die würde gehen, möchte ich aber aus Performancegründen (es handelt sich um eine Archiv-Tabelle, die alles protokolliert) und weil es nicht sonderlich schön ist vermeiden: Man holt sich mit einem zusätzlichen SELECT den Namen der id-Spalte anhand des Tabellennamens aus dem information_schema.
ich möchte aus einer OLD/NEW-Spalte einen Wert auslesen. Nun stehe ich vor dem Problem, dass meine id-Spalten wie alle meine Spalten ein Präfix haben, das tabellenspezifisch ist. Beispiel utn_id für die Tabelle utn_unternehmen oder org_id für org_organisation. Eine Funktion soll mir jetzt unabhängig von der Tabelle die aktuelle id in eine Archiv-Tabelle schreiben. Hätte ich jede id einheitlich als 'id' benannt, wäre mit NEW.id alles in Butter.
Habe ich aber nicht und deshalb muss ich einen Weg finden, den id-Wert aus NEW herauszubekommen, ohne den Tabellennamen schon hardkodiert in die Funktion zu schreiben.
Möglichkeit 1: Es gibt wie, glaube ich, bei MySQL eine Möglichkeit auf die erste Spalte zuzugreifen, so in der Art NEW.[1].
Geht meines Wissens nicht.
Möglichkeit 2: Ich ermittle aus dem Tabellennamen, der ja zugreifbar ist, den Namen der id-Spalte. Das könnte gehen, den Namen utn_id in eine Variable zu bugsieren, ist keine Schwierigkeit. Irgendwie schaffe ich es aber nicht, NEW und die Variable zu koppeln: NEW.var funktioniert nicht, aber vielleicht fehlt mir hier nur die genaue Syntax.
Möglichkeit 3: Man kann die Werte von NEW.* irgendwie in eine Array-Struktur überführen und dann auf den ersten Eintrag zugreifen. Könnte gehen, habe dazu aber nichts gefunden.
Möglichkeit 4: Man übergibt der Triggerfunktion einen passenden Parameter. Würde gehen, lieber wäre mir aber eine der ersten Varianten.
Möglichkeit 5: Die würde gehen, möchte ich aber aus Performancegründen (es handelt sich um eine Archiv-Tabelle, die alles protokolliert) und weil es nicht sonderlich schön ist vermeiden: Man holt sich mit einem zusätzlichen SELECT den Namen der id-Spalte anhand des Tabellennamens aus dem information_schema.