可以,存储过程是可以递归调用的。
不过具体是否支持、怎么用、有什么限制,取决于你使用的数据库类型。
| 数据库 | 是否支持递归存储过程 | 说明 |
|---|---|---|
| Oracle | ✅ 支持 | 直接递归调用自身即可 |
| MySQL | ✅ 支持(5.0+) | 需要设置 max_sp_recursion_depth |
| SQL Server | ✅ 支持 | 有最大递归层数限制(默认 32) |
| PostgreSQL | ✅ 支持 | 函数/存储过程均可递归 |
| DB2 | ✅ 支持 | 有递归深度限制 |
SET max_sp_recursion_depth = 10;
DELIMITER $$
CREATE PROCEDURE test_recursive(IN n INT)
BEGIN
IF n > 0 THEN
SELECT n;
CALL test_recursive(n - 1);
END IF;
END$$
DELIMITER ;
CALL test_recursive(5);
CREATE OR REPLACE PROCEDURE p_rec(n NUMBER) IS
BEGIN
IF n > 0 THEN
DBMS_OUTPUT.PUT_LINE(n);
p_rec(n - 1);
END IF;
END;
递归深度限制
maximum stored procedure recursion depth exceeded必须有终止条件
性能问题
事务与锁
如果你能告诉我 用的是哪种数据库 + 具体业务场景,我可以直接帮你写更合适的方案(递归 or 非递归)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。