oracle存储过程中的递归,递归存储过程中使用cursor

递归存储过程中使用cursor可以用来向上遍历有向图,找出其直系父辈。

注意定义成local类型的cursor ![@more@]

PROCEDURE sp_get_all_lineal_parent

@node_id int,

@lineal_path varchar(200) output

with encryption

AS

SET NOCOUNT ON

BEGIN

IF ISNULL(@lineal_path, 'NULL') = 'NULL' SET @lineal_path = ''

IF EXISTS( select DependentProductID from Dependence_TB where ProductID = @node_id )

BEGIN

DECLARE cur_parent_node CURSOR FAST_FORWARD local FOR

SELECT DependentProductID

FROM Dependence_TB

WHERE ProductID = @node_id

DECLARE @parent_node_id int

OPEN cur_parent_node

FETCH NEXT FROM cur_parent_node INTO @parent_node_id

WHILE @@FETCH_STATUS = 0

BEGIN

set @lineal_path = @lineal_path + ',' + cast(@parent_node_id as varchar)

exec sp_get_all_lineal_parent @parent_node_id, @lineal_path output

FETCH NEXT FROM cur_parent_node INTO @parent_node_id

END

CLOSE cur_parent_node

DEALLOCATE cur_parent_node

END

insert into ##temp_a(a) select 100

select * from ##temp_a

END

--调用示例begin

declare @path varchar(200)

create table ##temp_a(a int)

EXEC sp_get_all_lineal_parent 12, @path output

drop table ##temp_a

select @path

end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值