oracle删除树节点 及其子节点的全部(存储过程_游标_递归),18-Oracle学习_存储过程-递归-树状结构的存储与展示...

一, 表

create table article

(

id number primary key,

cont varchar2(4000),

pid number,

isleaf number(1), -- 0, 叶子结点; 1, 非叶子结点

alevel number(2)

);

二, 数据

insert into article values(1, '蚂蚁大战大象', 0, 0, 0);

insert into article values(2, '大象被打趴下了', 1, 0, 1);

insert into article values(3, '蚂蚁也不好过', 2, 1, 2);

insert into article values(4, '瞎说', 2, 0, 2);

insert into article values(5, '没有瞎说', 4, 1, 3);

insert into article values(6, '怎么可能', 1, 0, 1);

insert into article values(7, '怎么没有可能', 6, 1, 2);

insert into article values(8, '可能性是很大的', 6, 1, 2);

insert into article values(9, '大象进医院了', 2, 0, 2);

insert into article values(10, '护士是蚂蚁', 9, 1, 3);

三, 树状结构

1-蚂蚁大战大象

2-大象被打趴下了    => 1

3-大象被打趴下了    => 2

4-瞎说    => 2

5-没有瞎说    => 4

9-大象进医院了    => 2

10-护士是蚂蚁    => 9

6-怎么可能    => 1

7-怎么没有可能    => 6

8-可能性是很大的    => 6

四, 使用存储过程 展示

1, 创建

create or replace procedure p

(v_pid article.pid%type, v_level binary_integer)

is

cursor c is select * from article where pid = v_pid;

v_preStr varchar2(1024) := '';

begin

-- 缩进

for i in 1..v_level loop

v_preStr := v_preStr || '* ';

end loop;

for v_article in c loop

dbms_output.put_line(v_preStr || v_article.id || '-' || v_article.cont || '=>' || v_article.pid);

-- 如果不是叶子结点, 则递归

if (v_article.isleaf = 0) then

p (v_article.id, v_level + 1);

end if;

end loop;

end;

2, 执行

SQL> exec p(0,0);

1-蚂蚁大战大象=>0

* 2-大象被打趴下了=>1

* * 3-蚂蚁也不好过=>2

* * 4-瞎说=>2

* * * 5-没有瞎说=>4

* * 9-大象进医院了=>2

* * * 10-护士是蚂蚁=>9

* 6-怎么可能=>1

* * 7-怎么没有可能=>6

* * 8-可能性是很大的=>6

3, 注意

oracle中开头的空格会被忽略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值