Alternative zur Verwendung von Prepared Statement in Trigger mit MySQL

Ich versuche, einen MySQL Before Insert-Trigger mit dem folgenden Code zu erstellen, der genau das tut, was ich möchte, wenn ich eine Möglichkeit finde, die vom Trigger generierte vorbereitete Anweisung auszuführen.

Gibt es alternative Möglichkeiten, vorbereitete Anweisungen aus Triggern heraus auszuführen? Vielen Dank

BEGIN
    SET @CrntRcrd = (SELECT AUTO_INCREMENT FROM information_schema.TABLES 
              WHERE TABLE_SCHEMA=DATABASE()
              AND TABLE_NAME='core_Test');

  SET @PrevRcrd = @CrntRcrd-1;

    IF (NEW.ID IS NULL) THEN
        SET NEW.ID = @CrntRcrd;
    END IF;

    SET @PrevHash = (SELECT Hash FROM core_Test WHERE Record=@PrevRcrd);

    SET @ClmNms = (SELECT CONCAT('NEW.',GROUP_CONCAT(column_name 
                  ORDER BY ORDINAL_POSITION SEPARATOR ',NEW.'),'')
                  FROM information_schema.columns 
                  WHERE table_schema = DATABASE() 
                  AND table_name = 'core_Test');

  SET @Query = CONCAT("SET @Query2 = CONCAT_WS(',','",@PrevHash,"','", @CrntRcrd, "',", @ClmNms, ");");

  PREPARE stmt1 FROM @Query;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1; 

  SET NEW.Hash = @Query2;
END

UPDATE / ERKLÄRUNG: Die Daten werden wie folgt in einer Tabelle gespeichert.

+------------+-----+------+----------------+
| Record (AI)| ID  | Data | HASH           |
+------------+-----+------+----------------+
| 1          | 1   | ASDF | =DHFBGKJSDFHBG | (Hash Col 1)
| 2          | 2   | NULL | =UEGFRYJKSDFHB | (Hash Col 1 + Col 2)
| 3          | 1   | VBNM | =VKJSZDFVHBFJH | (Hash Col 2 + Col 3)
| 4          | 4   | TYUI | =KDJFGNJBHMNVB | (Hash Col 3 + Col 4)
| 5          | 5   | ZXCV | =SDKVBCVJHBJHB | (Hash Col 4 + Col 5)
+------------+-----+------+----------------+

Bei jedem Einfügebefehl generiert die Tabelle einen Hash-Wert für diese Zeile, indem der Hash-Wert der vorherigen Zeile an ein CONCAT () der gesamten neuen Zeile angehängt und anschließend die gesamte Zeichenfolge erneut durchsucht wird. Dadurch wird ein laufender Datensatz mit Hash-Werten für Prüfzwecke / zur Verwendung in einem anderen Teil der Anwendung erstellt.

Meine Einschränkungen sind, dass dies vor dem INSERT erfolgen muss, da die Zeilen danach nicht mehr aktualisiert werden können.

AKTUALISIEREN: Ich verwende derzeit den folgenden Code, bis ich eine Möglichkeit finde, die Spaltennamen dynamisch an CONCAT zu übergeben:

BEGIN

  SET @Record = (
    SELECT AUTO_INCREMENT FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA=DATABASE()
    AND TABLE_NAME='core_Test'    #<--- UPDATE TABLE_NAME HERE
  );
  SET @PrevRecrd = @Record-1;

    IF (new.ID IS NULL) THEN
    SET new.ID = @Record;
  END IF;

  SET @PrevHash = (
    SELECT Hash FROM core_Test    #<--- UPDATE TABLE_NAME HERE
    WHERE Record=@PrevRecrd
  );

  SET new.Hash = SHA1(CONCAT_WS(',',@PrevHash, @Record,
    /* --- UPDATE TABLE COLUMN NAMES HERE (EXCLUDE "new.Record" AND "new.Hash") --- */
    new.ID, new.Name, new.Data
  ));

END

Antworten auf die Frage(1)

Ihre Antwort auf die Frage