Je suis en train de faire une fonction qui construit récursivement un chemin pour une catégorie spécifiquerécursives fonctions stockées dans MySQL
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
Lorsque je tente d'exécuter cette fonction avec une catégorie qui n'a pas de parents (id_parent = 0) ça marche bien mais quand j'essaie une catégorie qui a un parent_id> 0, je reçois 1424 fonctions récursives et les triggers ne sont pas autorisés.
Comment puis-je contourner ce problème? Je vais héberger ce code sur un service d'hébergement web régulier qui devrait avoir au moins la version 5.1 du serveur MySQL.
Après l'aide de Ike Walker J'ai fait une precedure place qui fonctionne bien
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 ;
J'utilise alors quelque chose comme ça pour l'appeler
CALL getPath(72, @temp); SELECT @temp;
En ce moment je développe sur Ubuntu avec la version MySQL-Server: 5.1.41-3ubuntu12.6 (Ubuntu) – Tirithen
J'ai trouvé http: // forums .mysql.com/read.php? 98,224107,224638 # msg-224638 qui parle de SET max_sp_recursion_depth = N; où N est le nombre de récursions à autoriser. Mais je reçois toujours 1424 fonctions stockées récursives et les déclencheurs ne sont pas autorisés. – Tirithen