Die Aufgabe: eine oft benötigte Funktion innerhalb des MySQL ablegen. Eine Struktur (mit unbekannter Tiefe) wurde in einer Tabelle (jeweils ID oben und unten) abgelegt. Die Funktion soll eine beliebige ID in den dazu passenden Pfad umwandeln können.
Die Lösung: eine eigene Funktion im MySQL. Sie sucht – ausgehend von der aktuellen ID – die Parent-ID, löst diese in ihren Bezeichner auf und beendet sich, wenn die aktuelle ID gleich 0 ist.
[code lang=“sql“]DELIMITER $$
DROP FUNCTION IF EXISTS `berichte`.`MW_ID_TO_PATH` $$
CREATE FUNCTION `berichte`.`MW_ID_TO_PATH`
(id INT, binder VARCHAR(10))
RETURNS TEXT
BEGIN
DECLARE node VARCHAR(200) DEFAULT “;
DECLARE path TEXT DEFAULT “;
IF id = 0 THEN
SET node = ‚ROOT‘;
ELSE
SET node = (
SELECT bezeichner FROM schluessel
WHERE schluesselId = id);
END IF;
SET path = CONCAT(path, node);
WHILE id > 0 DO
SET id = (
SELECT schluesselObenId FROM struktur s
WHERE schluesselUntenId = id);
IF id = 0 THEN
SET node = ‚ROOT‘;
ELSE
SET node = (
SELECT bezeichner FROM schluessel
WHERE schluesselId = id);
END IF;
SET path = CONCAT(node, binder, path);
END WHILE;
RETURN path;
END $$
DELIMITER ;[/code]