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

使用mysql进行递归调用的存储过程,第1张

概述enter image description hereget legside from binary我已尝试使用存储过程递归调用.我需要根据leg1基于leg1显示相关名称但它显示错误,例如#1414 - OUT或INOUT参数2用于例行sample.getVolume不是BEFORE触发器中的变量或NEW伪变量这是我的代码,DELIMITER $$

enter image description hereget legside from binary

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

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

这是我的代码,

DEliMITER $$CREATE PROCEDURE getVolume( IN param_name VARCHAR(255),OUT result VARCHAR(255 ))BEGIN SELECT val INTO result FROM employee WHERE emp_name = param_name ;IF result IS NulL THENselect result;ELSE     CALL getVolume(result,'');END IF;END $$DEliMITER ;SET @@GLOBAL.max_sp_recursion_depth = 255;SET @@session.max_sp_recursion_depth = 255; call getVolume('new',@result);select @result;
最佳答案@Shadow的答案是正确的.这是一个可以帮助您的实用示例:

DEliMITER //DROP table IF EXISTS `employee`//DROP PROCEDURE IF EXISTS `getVolume`//CREATE table `employee` (  `emp_name` VARCHAR(255),`val` VARCHAR(255))//INSERT INTO `employee` (`emp_name`,`val`)VALUES('demo','new'),('new','d.new'),('d.new','vIEw'),('vIEw','hello'),('hello',NulL)//CREATE PROCEDURE `getVolume`(  IN `param_name` VARCHAR(255),OUT `result` VARCHAR(255))BEGIN  DECLARE `next_param_name` VARCHAR(255);  SELECT `val` INTO `next_param_name`  FROM `employee`  WHERE `emp_name` = `param_name`;  IF `next_param_name` IS NulL THEN    SET `result` := `param_name`;  ELSE    -- CALL `getVolume`(`result`,'');    CALL `getVolume`(`next_param_name`,`result`);    -- SET `result` := CONCAT(`param_name`,',IFNulL(`result`,''));  END IF;END//DEliMITER ;

SQL Fiddle demo 总结

以上是内存溢出为你收集整理的使用mysql进行递归调用的存储过程全部内容,希望文章能够帮你解决使用mysql进行递归调用的存储过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存