mysql 存储过程 递归查询_MySQL用存储过程实现递归查询(二) | 学步园

I have only recently started working heavily

with stored procedures and functions in MySQL. After years in the

Oracle world with advanced stored procedures, functions and packages,

I’ve had to come to grips with the shortcomings of MySQL. One of those

is recursive functions. MySQL allows recursive stored procedures, but

not recursive stored functions. Here is my workaround…

First create your main logic as a stored procedure with an OUT variable:

DELIMITER |

CREATE PROCEDURE my_recursive_proc(a_some_parameter INTEGER, OUT a_result INTEGER)

BEGIN

DECLARE v_my_number INTEGER DEFAULT 0;

-- Have to set max_sp_recursion_depth inside the stored procedure

SET max_sp_recursion_depth := 20;

SET v_my_number := v_my_number + a_some_parameter;

IF v_my_number < 100 THEN

CALL my_recursive_proc(10, v_my_number);

END IF;

SET a_result := v_my_number;

END |

DELIMITER ;

So now I have a recursive procedure that calls itself adding 10 to

the initial number until we get to 100. In the real world we'd be doing

something serious like descending through related child records until we

find some search result. What I really want now is a function I can

call in a WHERE clause somewhere.

Here's all we have to do:

CREATE FUNCTION my_recursive_func(a_some_parameter INTEGER)

RETURNS INTEGER

BEGIN

DECLARE v_result INTEGER DEFAULT 0;

CALL my_recursive_proc(a_some_parameter, v_result);

RETURN v_result;

END |

DELIMITER ;

Now in my SELECT statements I can do:

SELECT * FROM my_table WHERE my_recursive_func(some_column) = 100;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值