Rolf B: mysql: 2 Fragen zu Triggern

Beitrag lesen

Hallo Jörg,

soweit ich die Syntax richtig lese, brauchst Du zwei Trigger.

Das Verteilen der Werte auf mehrere Zeilen bedeutet, dass Du den String splitten und über das Ergebnis eine Schleife laufen lassen musst. Das ist in MySQL nicht trivial, weil es keinen Array-Typ gibt und kein Gegenstück zu PHPs EXPLODE. Eine Operation, die einen String an einem Delimiter aufteilt und daraus eine Temp-Tabelle macht, ist mir auch nicht bekannt.

Ich persönlich würde nun mit Schleifenkonstrukten und geschachteltem SUBSTRING_INDEX arbeiten. Einer, um "alle Werte bis zum x. Komma" zu holen und dann einen zweiten drumrum, um "bis zum -1 Komma" zu lesen.

SUBSTRING_INDEX('a,b,c,d', ',', 3) ergibt "a,b,c" - also 3 der kommaseparierten Teile.

SUBSTRING_INDEX('a,b,c', ',', -1) ergibt "c" - einen Teil, ab rechts.

Vorher müsste man noch die Anzahl der Kommas zählen, um zu wissen, wie oft man das machen muss.

Alternativ kann man auch in einer Schleife mit INSTR das erste Komma suchen, den Teil davor wegschreiben und mit dem Teil dahinter weitermachen. Wenn man kein Komma mehr findet, schreibt man den verbeleibenden Teil weg. Es ist jedenfalls Programmierung wie in einer Stored Procedure, und vermutlich ist es auch sinnvoll, daraus eine Stored Procedure zu machen, weil man ja zwei Trigger braucht.

Aber solche Reparaturen am offenen Herzen sind immer nur die Notlösung. Besser wäre es sicherlich, den Code zu korrigieren und die DB in einem Batch-Job zu fixen.

Rolf

--
sumpsi - posui - obstruxi