使用mysql进行递归调用的存储过程

前端之家收集整理的这篇文章主要介绍了使用mysql进行递归调用的存储过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

enter image description here

enter image description hereget legside from binary

我已尝试使用存储过程与递归调用.我需要根据leg1基于leg1显示相关名称

但它显示错误,例如#1414 – OUT或INOUT参数2用于例行sample.getVolume不是BEFORE触发器中的变量或NEW伪变量

这是我的代码,

  1. DELIMITER $$
  2. CREATE PROCEDURE getVolume( IN param_name VARCHAR(255),OUT result VARCHAR(255 ))
  3. BEGIN
  4. SELECT val INTO result FROM employee WHERE emp_name = param_name ;
  5. IF result IS NULL THEN
  6. select result;
  7. ELSE
  8. CALL getVolume(result,'');
  9. END IF;
  10. END $$
  11. DELIMITER ;
  12. SET @@GLOBAL.max_sp_recursion_depth = 255;
  13. SET @@session.max_sp_recursion_depth = 255;
  14. call getVolume('new',@result);
  15. select @result;
  16. @H_403_13@
最佳答案
@Shadow的答案是正确的.这是一个可以帮助您的实用示例:

  1. DELIMITER //
  2. DROP TABLE IF EXISTS `employee`//
  3. DROP PROCEDURE IF EXISTS `getVolume`//
  4. CREATE TABLE `employee` (
  5. `emp_name` VARCHAR(255),`val` VARCHAR(255)
  6. )//
  7. INSERT INTO `employee` (`emp_name`,`val`)
  8. VALUES
  9. ('demo','new'),('new','d.new'),('d.new','view'),('view','hello'),('hello',NULL)
  10. //
  11. CREATE PROCEDURE `getVolume`(
  12. IN `param_name` VARCHAR(255),OUT `result` VARCHAR(255)
  13. )
  14. BEGIN
  15. DECLARE `next_param_name` VARCHAR(255);
  16. SELECT `val` INTO `next_param_name`
  17. FROM `employee`
  18. WHERE `emp_name` = `param_name`;
  19. IF `next_param_name` IS NULL THEN
  20. SET `result` := `param_name`;
  21. ELSE
  22. -- CALL `getVolume`(`result`,'');
  23. CALL `getVolume`(`next_param_name`,`result`);
  24. -- SET `result` := CONCAT(`param_name`,',IFNULL(`result`,''));
  25. END IF;
  26. END//
  27. DELIMITER ;
  28. @H_403_13@

SQL Fiddle demo

猜你在找的MySQL相关文章