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

oracle树查询

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

RS.PARENT_RESOURCE_ID = #{resourceId}

RS.PARENT_RESOURCE_ID = '0'

CONNECT BY PRIOR RS.RESOURCE_ID=RS.PARENT_RESOURCE_ID

ORDER BY RS.RESOURCE_SORTNUMBER

mysql 存储过程实现

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;

以上为自上往下递归,自下往上递归,更改游标按照PARENT_RESOURCE_ID递归即可

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2016-05-10 10:49

浏览 231

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值