標籤:
樹狀結構
預存程序中通過遞迴構建,類似BBS回帖顯示,代碼共三段:
建表,插入資料,建立預存程序顯示;
1.
create table article
(
id number primary key,
cont varchar2(4000),
pid number,
idleaf number(1), --0為非葉子節點,1為葉子節點
alevel number(2)
);
2.
insert into article values(1,‘螞蟻大戰大象‘,0,0,0);
insert into article values(2,‘大象被打趴下了‘,1,0,1);
insert into article values(3,‘螞蟻也不好過‘,1,0,1);
insert into article values(4,‘瞎說‘,2,1,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);
3.
create or replace procedure tree(v_pid article.pid%type,v_alevel article.alevel%type)
is
cursor c is select * from article where pid=v_pid;
v_str varchar2(2048) :=‘ ‘;
begin
for i in 0..v_alevel loop
v_str :=v_str||‘ ‘;
end loop;
for v_article in c loop dbms_output.put_line(v_str||v_article.cont);
if (v_article.isleaf =0) then
tree(v_article.id,v_article.alevel);
end if;
end loop;
end;
結果前面的N*4個空格不顯示:
設定空格輸出後,問題解決:
其它問題:第一層的輸出前不應該帶空格,設定初始字串為空白,i從1開始。
設定 oracle sqlplus DBMS_OUTPUT.put_line
下面內容摘錄自
http://blog.csdn.net/wbj1234566/article/details/2557515
1 設定DBMS_OUTPUT.put_line輸出顯示 SET SERVEROUTPUT ON
2 關閉DBMS_OUTPUT.put_line輸出顯示 SET SERVEROUTPUT OFF
3 設定DBMS_OUTPUT緩衝區大小 SET SERVEROUTPUT ON SIZE number(1000)
4 設定只顯示DBMS_OUTPUT預設的長度 SET SERVEROUTPUT ON FORMAT TRUNCATED
5 設定空格的輸出 SET SERVEROUTPUT ON FORMAT WRAPPED
6 取消空格的輸出 SET SERVEROUTPUT ON FORMAT WORD_WRAPPED
oracle 樹狀結構遞迴 PL/SQL輸出控制 包括空格輸出控制