Recursive gespeicherte Funktionen in MySQL

Ich versuche eine Funktion zu erstellen, die rekursiv einen Pfad für eine bestimmte Kategorie erstellt

CREATE FUNCTION getPath(inId INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
    DECLARE return_path TEXT;
    DECLARE return_parent_id INT;
    SELECT CONCAT('/', name) INTO return_path FROM article_categories WHERE id = inId;
    SELECT parent_id INTO return_parent_id FROM article_categories WHERE id = inId;

    IF return_parent_id > 0 THEN
        SELECT CONCAT(getPath(return_parent_id), return_path) INTO return_path;
    END IF;

    RETURN return_path;
END

Wenn ich versuche, diese Funktion mit einer Kategorie ohne übergeordnete Elemente auszuführen (parent_id = 0), funktioniert sie einwandfrei. Wenn ich jedoch eine Kategorie mit einer übergeordneten_id> 0 versuche, erhalte ich 1424. Gespeicherte rekursive Funktionen und Trigger sind nicht zulässig.

Wie kann ich das umgehen? Ich werde diesen Code auf einem regulären Webhosting-Dienst hosten, der mindestens MySQL Server Version 5.1 haben sollte.

Nach ein bisschen Hilfe von Ike Walker habe ich stattdessen eine Voreinstellung getroffen, die gut funktioniert

DROP PROCEDURE IF EXISTS getPath;
DELIMITER //
CREATE PROCEDURE getPath(IN category_id INT UNSIGNED, OUT return_path TEXT)
BEGIN
    DECLARE parent_id INT UNSIGNED;
    DECLARE path_result TEXT;

    SET max_sp_recursion_depth=50;

    SELECT CONCAT('/', ac.name), ac.parent_id INTO return_path, parent_id FROM article_categories AS ac WHERE ac.id = category_id;

    IF parent_id > 0 THEN
        CALL getPath(parent_id, path_result);
        SELECT CONCAT(path_result, return_path) INTO return_path;
    END IF;
END //
DELIMITER ;

Ich benutze dann so etwas, um es zu nennen

CALL getPath(72, @temp); SELECT @temp;

Antworten auf die Frage(4)

Ihre Antwort auf die Frage