MySQL 函数过程递归
作者:xling 来源:xling博客 时间:2008-07-25 19:32:00
目的是想通过给定一个ID,取出所有的子ID,包括子ID的子ID。
一开始写成FUNCTION,因为FUNCTION调用方便,但是报错:
ERROR 1424 (HY000): Recursive stored functions and triggers are not allowed
就是说:mysql不支持 函数递归,查了一下,MYSQL支持过程递归。
于是改成过程:
CREATE PROCEDURE USNOWER_P_SUB_CAT(IN IN_ID INT,OUT OUT_IDS VARCHAR(1000))
BEGIN
DECLARE V_STOP BOOLEAN DEFAULT FALSE;
DECLARE V_ID INT;
DECLARE V_SUB_IDS VARCHAR(1000);
DECLARE V_IDS VARCHAR(1000);
DECLARE CUR1 CURSOR FOR SELECT ID FROM USNOWER_ART_CAT WHERE FA_ID = IN_ID;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET V_STOP = TRUE;
SET @@max_sp_recursion_depth = 10;
OPEN CUR1;
LAB1:WHILE NOT V_STOP DO
FETCH CUR1 INTO V_ID;
IF V_STOP THEN
LEAVE LAB1;
END IF;
CALL USNOWER_P_SUB_CAT(V_ID,V_SUB_IDS);
SET V_IDS = CONCAT_WS(',',V_IDS,V_ID,V_SUB_IDS);
END WHILE LAB1;
SET OUT_IDS = V_IDS;
END//
开始没加红色的那句,报错:
ERROR 1456 (HY000): Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine ***
SELECT @@max_sp_recursion_depth ,结果是0,
我这小小的递归跟本不可能超过10层,所以就在过程里加入了红色的那句。
运行,一切OK,
就是调试太麻烦了,怀念TOAD做ORACLE的时候,那个叫做方便。
标签:mysql,错误,递归
0
投稿
猜你喜欢
优化次数过多的循环
2009-11-12 12:35:00
现代 javscript 编程
2011-04-21 16:24:00
中英文双语导航菜单
2007-05-11 17:04:00
如何做一个文本搜索?
2010-07-12 19:00:00
Oracle 触发器的使用小结
2009-05-24 19:54:00
长文章自动分页asp实例-支持HTML
2007-10-10 21:29:00
用browsercam做用户登录后页面的兼容性测试
2008-12-29 12:05:00
两个css郁闷的发现
2007-12-16 15:31:00
如何实现html表格里隔行换色
2007-10-19 13:42:00
asp获取客户端的MAC地址
2007-08-17 10:58:00
数字人组件反写[asp组件开发实例1]
2009-06-09 13:10:00
photoshop快捷键大全及使用技巧
2007-10-26 07:40:00
xhtml+css页面制作过程中问题的解决方案
2008-08-05 18:00:00
Quickwork For Asp -实战之后台管理
2009-12-31 19:13:00
document.createElement()用法及注意事项
2008-04-21 15:16:00
各种JavaScript开发工具比较
2007-10-23 13:29:00
中国传统色彩名录
2007-11-29 18:36:00
XML轻松学习手册(3)XML的术语
2008-09-05 17:17:00
设计地址栏透明icon图标方法
2008-10-25 16:42:00
Host localhost is not allowed to conn
2011-02-23 12:41:00