DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`balanceNestTree_addChild`( vSelf INT, vName VARCHAR(45) ) BEGIN /** * Agrega un nuevo nodo hijo a un nodo existente dentro de la estructura * de árbol de vn.balanceNestTree. * * @param vSelf Identificador del nodo * @param vName Nombre del nuevo nodo hijo */ DECLARE vTable VARCHAR(45) DEFAULT util.quoteIdentifier('balanceNestTree'); DECLARE vLeft INT; CREATE OR REPLACE TEMPORARY TABLE tAux SELECT 0 lft; EXECUTE IMMEDIATE CONCAT( 'UPDATE tAux SET lft = (SELECT lft FROM ', vTable, ' WHERE id = ?)') USING vSelf; SELECT lft INTO vLeft FROM tAux; EXECUTE IMMEDIATE CONCAT( 'UPDATE ', vTable, ' SET rgt = rgt + 2 WHERE rgt > ? ORDER BY rgt DESC') USING vLeft; EXECUTE IMMEDIATE CONCAT( 'UPDATE ', vTable, ' SET lft = lft + 2 WHERE lft > ? ORDER BY lft DESC') USING vLeft; EXECUTE IMMEDIATE CONCAT( 'INSERT INTO ', vTable, ' (name, lft, rgt) VALUES(?, ? + 1, ? + 2)') USING vName, vLeft, vLeft; DROP TEMPORARY TABLE tAux; END$$ DELIMITER ;