这是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的帮我改一下他这段吗
你看的这个是查询所有下级的递归,看点有点懵正常的,查询父级的是这样的:
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);
mysql什么版本,8.x的话直接CTE递归简单明了