搜索:
首页 >> 数据库 >> MySQL教程 >> MySQL 函数过程递归

MySQL 函数过程递归

2008-7-25 作者:xling 来源:xling博客 投递文章

目的是想通过给定一个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的时候,那个叫做方便。

Tags:mysql  错误  递归 
相关文章