MySql 游标笔记

delimiter &&
create PROCEDURE findProjectDetailsByProjectId(in p_userId int)
BEGIN
   DECLARE done INT DEFAULT 0;
   DECLARE d_projectId int;
     DECLARE projectLength int;
     DECLARE c_projectId VARCHAR(100) default '';
   DECLARE findProject_cur CURSOR for
            select t1.projectId
                 from (
                    select * from  odao_admin.admin_login_user where dept_id in(
                        select deptId from odao_admin.admin_role_department where roleId  = (select role_id from odao_admin.admin_role_user where user_id = p_userId )
                    )) t,odao_wpf_project t1 where t.user_id = t1.userId and t1.`status` = 1  ;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN findProject_cur;
              findProject_loop:LOOP
                     FETCH findProject_cur INTO d_projectId;
                        IF done THEN
                                LEAVE findProject_loop;
                        END IF;
                        set c_projectId = CONCAT(c_projectId,CONCAT(d_projectId,',')) ;
              END LOOP;
        CLOSE findProject_cur;

        set projectLength = (select char_length(c_projectId));

        set c_projectId = (select left(c_projectId,char_length(c_projectId)-1)  );

        set @vsql = CONCAT('select t2.*,t3.* from odao_wpf_board_task t2,(select t.boardId,boardName,t1.* from odao_wpf_board t,(select boardClassId,boardClassName from odao_wpf_boardclass where projectId in(',c_projectId,') ORDER BY orderId  ) t1 where t.boardClassId = t1.boardClassId ) t3 where t2.boardId = t3.boardId' );
      
        select @vsql;

        prepare stmt from @vsql;
     EXECUTE stmt;     
     deallocate prepare stmt;    
    
    
    
END
&&
delimiter ;

posted @ 2017-05-04 10:58  君哥~  阅读(132)  评论(0编辑  收藏  举报