CREATE PROCEDURE createChildLst (IN rootId INT,IN nDepth INT)
     BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE b INT;
      DECLARE cur1 CURSOR FOR SELECT id FROM treeNodes where pid=rootId;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
      insert into tmpLst values (null,rootId,nDepth);
      OPEN cur1;    
      FETCH cur1 INTO b;
      WHILE done=0 DO
              CALL createChildLst(b,nDepth+1);
              FETCH cur1 INTO b;
      END WHILE;
    
      CLOSE cur1;
     END;我想让ndepth 大于十 后面记录就不查不来,也就是说深度我只查到10后面就不差了。 我用了 loop   死了2次机 好像是卡死机的。帮我解决下,thk

解决方案 »

  1.   

    参考这个贴子中的方法三:利用中间表和过程。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx自己改一下,另外加入对Level的判断。
      

  2.   

    CREATE PROCEDURE createChildLst (IN rootId INT,IN nDepth INT)
    BEGIN
     DECLARE done INT DEFAULT 0;
     DECLARE b INT;
     DECLARE cur1 CURSOR FOR SELECT id FROM treeNodes where pid=rootId;
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; insert into tmpLst values (null,rootId,nDepth); if nDepth<10 then
     OPEN cur1;

     FETCH cur1 INTO b;
     WHILE done=0 DO
             CALL createChildLst(b,nDepth+1);
             FETCH cur1 INTO b;
     END WHILE;

     CLOSE cur1;
     end if END;
      

  3.   

    请问一下,我每次
    call showChildLst(3);
    他都报这个错   我set max_sp_recursion_depth=225; 就可以了
      我都设了好几次了 每次都要这样吗?
     Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine createChildLst
      

  4.   

    我写程序调用这个过程是  要不要在调用前 都 set max_sp_recursion_depth  一下
      

  5.   


    是!
    或者直接在MYSQL的参数文件中定义,这样就不用每次写了。
      

  6.   


    可是购买的空间 不能给你设置mysql 参数啊
      

  7.   

    那没办法了。找你的空间商,或者你每次加上这个 set max_sp_recursion_depth