我是个老六 2022-08-25 00:59 采纳率: 59.6%
浏览 81
已结题

将oracle的递归转换成mysql递归

运行结果及报错内容

这是oracle的递归函数,从子部门递归父级部门

CREATE OR REPLACE FUNCTION FUN_GET_ORG_ID (child_dept_id IN NUMBER
return NUMBER
is
retCode number:=-1;
BEGIN
  SELECT
    distinct dept_Id INTO retCode
  FROM
    t_Department_Info
  WHERE
    par_dept_id is null
    start with dept_Id = child_dept_id
    connect by prior par_dept_id = dept_Id;
RETURN (retCode) ;
END ;

我的解答思路和尝试过的方法

我查了一下mysql递归,完全看不懂,链接如下
https://blog.csdn.net/wocaizhale/article/details/121600221

我想要达到的结果

请问有会sql的帮我改一下他这段吗

img

  • 写回答

2条回答 默认 最新

  • 一把编程的菜刀 2022-08-25 01:19
    关注

    你看的这个是查询所有下级的递归,看点有点懵正常的,查询父级的是这样的:

    DELIMITER 
    CREATE FUNCTION `getParentList`(root_id BIGINT) 
          RETURNS VARCHAR(1000) 
          BEGIN 
               DECLARE k INT DEFAULT 0;
             DECLARE fid INT DEFAULT 1;
             DECLARE str VARCHAR(1000) DEFAULT '$';
             WHILE rootId > 0 DO //大于0时一直执行循环
                  SET fid=(SELECT pid FROM table_name WHERE root_id=id); //查询当前root_id的父级ID
                   IF fid > 0 THEN //父级id大于0时,把父级合并到变量str 中,用逗号隔开
                      SET str = concat(str,',',fid);   
                       SET root_id = fid;  
                   ELSE 
                         SET root_id=fid;
                   END IF;  
          END WHILE;
        RETURN str;
      END  //
    delimiter ;
    
    测试语句:
    SELECT getParentList(10);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    我是个老六 2022-08-25 01:27

    请问 k , fid,和str是什么意思

    回复
    一把编程的菜刀 回复 我是个老六 2022-08-25 01:30

    定义变量的呀,看上去就可以明白了,fid保存的是当前的父级id呀,str保存所有的父级ID,上面不都有说明了么?

    回复
    一把编程的菜刀 回复 我是个老六 2022-08-25 01:37

    WHILE rootId > 0 DO 这个地方应该 WHILE root_id> 0 DO

    回复
    展开全部5条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月25日
  • 创建了问题 8月25日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部