我有一个递归mysql 存储过程我为此设置了max_sp_recursion_depth=10.
Now, 不设置局部变量,我想知道单次执行期间递归的级别是多少。
我认为肯定有一个会话变量来存储深度(否则你怎么知道当你达到最大级别时),但我找不到它。我会避免使用变量来增量地执行此操作。我怎么知道这个(如果有的话)系统变量?
我知道你特别问过如何做到这一点without用户创建的变量 - 但对于遇到此问题的其他人来说,值得发布如何做到这一点with一个,因为它相当简单:
CREATE PROCEDURE sp_recursive
BEGIN
// ... DECLAREs here
-- Set maximum recursion depth (max is 255)
SET @@SESSION.max_sp_recursion_depth = 10;
-- Increment current recursion depth
SET @recursion_depth = IFNULL(@recursion_depth + 1, 1);
-- ... More stored procedure code
-- Decrement current recursion depth. Note: Care must be taken to ensure this line
-- is *always* executed at the end of the stored procedure.
SET @recursion_depth = @recursion_depth - 1;
END
解释
The @recursion_depth
会话范围的变量按上述递增SET
每次进入存储过程时都声明。第一次输入时,该变量未初始化,因此值为NULL
- 这是由以下人员检查的IFNULL()
,在本例中将其重新分配给 1。在存储过程结束、退出之前,深度需要递减。
进一步说明
值得注意的是 SQL Serverdoes提供一个内置的@@NESTLEVEL
变量用于执行上述操作 - 但不幸的是 MySQL 似乎没有等效的变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)