mysql 存储过程实现 oracle START WITH CONNECT BY

[color=green]oracle树查询[/color]
SELECT R.RESOURCE_ID,R.RESOURCE_NAME,R.RESOURCE_URL,R.RESOURCE_TYPE,R.CREATE_TIME,R.STATUS
,RS.RESOURCE_STRUCTURE_ID,RS.RESOURCE_LEVEL,RS.PARENT_RESOURCE_ID,RS.RESOURCE_SORTNUMBER
FROM T_SYS_RESOURCE_STRUCTURE RS JOIN T_SYS_RESOURCE R ON R.RESOURCE_ID = RS.RESOURCE_ID
START WITH
<if test="resourceId != null and resourceId != ''">
RS.PARENT_RESOURCE_ID = #{resourceId}
</if>
<if test="resourceId == null or resourceId == ''">
RS.PARENT_RESOURCE_ID = '0'
</if>
CONNECT BY PRIOR RS.RESOURCE_ID=RS.PARENT_RESOURCE_ID
ORDER BY RS.RESOURCE_SORTNUMBER



[color=green]mysql 存储过程实现[/color]
DROP PROCEDURE IF EXISTS `ResourcesTreeQuery`;
CREATE PROCEDURE `ResourcesTreeQuery`(paramId varchar(30))
BEGIN
create temporary table if not exists tmp_table(
RESOURCE_ID varchar(30),RESOURCE_NAME varchar(50),RESOURCE_URL varchar(200),RESOURCE_TYPE varchar(2),CREATE_TIME timestamp,STATUS varchar(2),RESOURCE_STRUCTURE_ID varchar(30),RESOURCE_LEVEL int,
PARENT_RESOURCE_ID varchar(30),RESOURCE_SORTNUMBER int
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET @@max_sp_recursion_depth = 99 ;
call ResourcesIterative(paramId);
select * from tmp_table
union SELECT R.RESOURCE_ID,R.RESOURCE_NAME,R.RESOURCE_URL,R.RESOURCE_TYPE,R.CREATE_TIME,R.STATUS
,RS.RESOURCE_STRUCTURE_ID,RS.RESOURCE_LEVEL,RS.PARENT_RESOURCE_ID,RS.RESOURCE_SORTNUMBER
FROM T_SYS_RESOURCE_STRUCTURE RS JOIN T_SYS_RESOURCE R ON R.RESOURCE_ID = RS.RESOURCE_ID
where RS.RESOURCE_ID=paramId;
drop temporary table if exists tmp_table;
END;


DROP PROCEDURE IF EXISTS `ResourcesIterative`;
CREATE PROCEDURE `ResourcesIterative`(paramId varchar(30))
BEGIN
declare tRESOURCE_ID varchar(30) character set utf8;
declare tRESOURCE_NAME varchar(50) character set utf8;
declare tRESOURCE_URL varchar(200) character set utf8;
declare tRESOURCE_TYPE varchar(2) character set utf8;
declare tCREATE_TIME timestamp;
declare tSTATUS varchar(2) character set utf8;
declare tRESOURCE_STRUCTURE_ID varchar(30) character set utf8;
declare tRESOURCE_LEVEL int;
declare tPARENT_RESOURCE_ID varchar(30) character set utf8;
declare tRESOURCE_SORTNUMBER int;

declare cur1 CURSOR FOR
select R.RESOURCE_ID,R.RESOURCE_NAME,R.RESOURCE_URL,R.RESOURCE_TYPE,R.CREATE_TIME,R.STATUS
,RS.RESOURCE_STRUCTURE_ID,RS.RESOURCE_LEVEL,RS.PARENT_RESOURCE_ID,RS.RESOURCE_SORTNUMBER
FROM T_SYS_RESOURCE_STRUCTURE RS JOIN T_SYS_RESOURCE R ON R.RESOURCE_ID = RS.RESOURCE_ID
where RS.PARENT_RESOURCE_ID=paramId
ORDER BY RS.RESOURCE_SORTNUMBER;


declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tRESOURCE_ID = null;

OPEN cur1 ;
FETCH cur1 INTO tRESOURCE_ID,tRESOURCE_NAME,tRESOURCE_URL,tRESOURCE_TYPE,tCREATE_TIME,tSTATUS,tRESOURCE_STRUCTURE_ID,tRESOURCE_LEVEL,tPARENT_RESOURCE_ID,tRESOURCE_SORTNUMBER;
WHILE ( tRESOURCE_ID is not null ) DO
insert into tmp_table values(tRESOURCE_ID,tRESOURCE_NAME,tRESOURCE_URL,tRESOURCE_TYPE,tCREATE_TIME,tSTATUS,tRESOURCE_STRUCTURE_ID,tRESOURCE_LEVEL,tPARENT_RESOURCE_ID,tRESOURCE_SORTNUMBER);
call ResourcesIterative(tRESOURCE_ID);
FETCH cur1 INTO tRESOURCE_ID,tRESOURCE_NAME,tRESOURCE_URL,tRESOURCE_TYPE,tCREATE_TIME,tSTATUS,tRESOURCE_STRUCTURE_ID,tRESOURCE_LEVEL,tPARENT_RESOURCE_ID,tRESOURCE_SORTNUMBER;
END WHILE;
CLOSE cur1;
END;
commit;



[color=red]以上为自上往下递归,自下往上递归,更改游标按照PARENT_RESOURCE_ID递归即可[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值