raikkonentk
Mitglied
Hallo,
die Überschrift klingt etwas komisch, aber ich wusste nicht, wie man es besser beschreibt.
Folgendes Problem, vereinfacht dargestellt:
Ziel ist es, einen Datensatz in eine Log-Tabelle zu schreiben, bevor er geändert wird.
Dafür der folgende (vereinfachte) Trigger
Wie in dem Quellcode zu sehen, gibt es eine stored Procedure "getColumnNames", die mir alle Spaltennamen für eine Tabelle ausliest. Allerdings bekomme ich die bei meiner Überlegung als String (varchar) zurück.
Und dann wird in dem Trigger bei "SELECT CONCAT(columns)" der String "columns" ausgegeben.
Also im Trigger sieht es z.B. so aus:
Führt zu dem Ergebnis: "id,description,acl"
Aber anstatt des Strings, möchte ich das der String dazu führt, dass die tatsächlichen Inhalte der Spalten zusammengefasst werden. Dafür darf der String eben nicht als String verarbeitet werden sondern müsste wortwörtlich angewendet werden.
Ziel wäre also so:
Führt zu dem Ergebnis "1,Inhalt der Beschreibung,ACL-Name"
Kann mir jemand helfen
?
Eine Alternative wäre die Spaltennamen in der Procedure in eine temporäre Tabelle zu schreiben (split_string á la http://lists.mysql.com/mysql/199134) und dann als Subquery in dem SELECT des Triggers aufzurufen, aber ich glaube da laufe ich am Ende wieder in das gleiche Problem.
Schönen 2. Weihnachtsfeiertag.
Vielen Dank.
die Überschrift klingt etwas komisch, aber ich wusste nicht, wie man es besser beschreibt.
Folgendes Problem, vereinfacht dargestellt:
Ziel ist es, einen Datensatz in eine Log-Tabelle zu schreiben, bevor er geändert wird.
Dafür der folgende (vereinfachte) Trigger
Code:
CREATE TRIGGER sampleTable_bd
BEFORE DELETE ON sampleTable
FOR EACH ROW
BEGIN
DECLARE previousTableValues varchar(10000);
DECLARE columns varchar(1000);
CALL getColumnNames(tableName, columns);
SELECT CONCAT(columns) INTO previousTableValues FROM sampleTable WHERE id = OLD.id;
CALL ...;
END
Code:
CREATE PROCEDURE getColumnNames(IN tableName varchar(30),OUT columnsRead varchar(1000))
BEGIN
SELECT group_concat(column_name SEPARATOR ',') INTO columnsRead FROM information_schema.columns WHERE table_name=tableName;
END
Und dann wird in dem Trigger bei "SELECT CONCAT(columns)" der String "columns" ausgegeben.
Also im Trigger sieht es z.B. so aus:
Code:
SELECT CONCAT('id,description,acl') ...
Aber anstatt des Strings, möchte ich das der String dazu führt, dass die tatsächlichen Inhalte der Spalten zusammengefasst werden. Dafür darf der String eben nicht als String verarbeitet werden sondern müsste wortwörtlich angewendet werden.
Ziel wäre also so:
Code:
SELECT CONCAT(id,description,acl) ...
Kann mir jemand helfen

Eine Alternative wäre die Spaltennamen in der Procedure in eine temporäre Tabelle zu schreiben (split_string á la http://lists.mysql.com/mysql/199134) und dann als Subquery in dem SELECT des Triggers aufzurufen, aber ich glaube da laufe ich am Ende wieder in das gleiche Problem.
Schönen 2. Weihnachtsfeiertag.
Vielen Dank.
Zuletzt bearbeitet: