test表数据如下:
ikey cname pikey
1 集团 0
2 公司 1
3 部门 2
4 个人 3
试写一递归函数,传入ikey值,遍历取出pikey值。运行时如传入ikey为4,则该函数遍历取出pikey值依次为3、2、1、0,最后返回0显示到前台。
--创建表 drop table test; drop sequence seq_test; create sequence seq_test; create table test( ikey number(5) primary key, cname varchar2(10), pikey number(3) ); insert into test values(seq_test.nextval,'集团',0); insert into test values(seq_test.nextval,'公司',1); insert into test values(seq_test.nextval,'部门',2); insert into test values(seq_test.nextval,'个人',3); commit; select * from test; --函数 create or replace function func_test(i_int in number) return number is result number(3); temp number(3); type ref_cursor is ref cursor; v_cursor ref_cursor; begin open v_cursor for 'select pikey from test where ikey<= '||i_int||'order by ikey desc'; loop fetch v_cursor into temp; exit when v_cursor%notfound; dbms_output.put_line(temp); if(temp=0) then result:=temp; goto label1; end if; end loop; <<label1>> close v_cursor; return result; exception when others then if(v_cursor%isopen) then close v_cursor; end if; return ''; end; --测试 declare v_pikey number; begin v_pikey :=func_test(4); dbms_output.put_line('结果值:'||v_pikey); end;