資料庫函式練習1
阿新 • • 發佈:2019-02-11
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;