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 numberis 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;