写递归最关键的要定义出来 递归函数 ,递归函数 最关键的要定义出来它的 参数 .和它的 返回值.
咱么做展现,不用返回值,直接做展现就行了,参数最重要,那就分析一下参数怎么去定义?这时候要
分析递归的过程,递归过程什么样呢?根据它的 id 找它的 父id,根据它的 父id 找到它的孩子,根据它
的孩子再找到它的孩子.那么分析这个参数肯定是一个id,因为只有传进来id,才知道怎么去找这个id
下面的孩子. 所以最关键定义出存储过程的参数。
--展现emp表的树状结构
1。写存储过程。
create or replace procedure p(v_empno emp.empno%type, v_grade binary_integer)
is
cursor c is
select * from emp where mgr = v_empno;
v_preStr varchar2(4000) := '';
begin
for i in 1..v_grade loop
v_preStr := v_preStr || '......';
end loop;
for v_emp in c loop
dbms_output.put_line(v_preStr || v_emp.ename);
p(v_emp.empno, v_grade + 1);
end loop;
end;
2.写执行语句。
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where mgr is null; ----①-----
dbms_output.put_line(v_emp.ename);
p(v_emp.empno, 1);
end;
附注:
select * into v_emp from emp where mgr is null;
此句用into关键字比较精妙。
查询来自emp表,当mgr等于空时,查询到的所有信息放到v_emp行(类型)上。
其实就是7839,King。不直接输入结果,这样查询出来更显的专业。