oracle 通過function 函式 返回結果集
阿新 • • 發佈:2019-02-11
自己理解分三步走
1.建立資料物件,用於儲存結果集中的結果。
create or replace type room as object
(
roomid varchar2(12),
roomarea varchar2(12),
kogicode varchar2(10),
structureid varchar2(12),
campusid varchar2(12),
isoffice varchar2(1)
);
2.建立類表物件,用於儲存要返回的結果。
create or replace type roomtable is table of room
3.建立函式。
create or replace function get511(iyear in number ) --get511為函式名稱,iyear為輸入引數 return roomtable --返回表 as --定義變數 roomobj room; itable roomtable := roomtable(); xtyear varchar(4) :=to_char(sysdate,'yyyy'); cursor newtestrooms is select sri.room_id,sri.room_area,srui.kogi_code,sri.structures_id,ssi.campus_id,srui.use_isoffice from sf_roominfo sri ,sf_structuresinfo ssi,sf_roomuseinfo srui where srui.room_id=sri.room_id and ssi.structures_id=sri.structures_id and ssi.structures_state <> 6 and ssi.structures_state <> 1; cursor hisrooms is select t.room_id from sf_roominfo t ; begin --判斷輸入的年份 if xtyear <= iyear then --使用者輸入的年份為當前年份或者之後 for cur in newtestrooms loop roomobj :=room(cur.room_id, cur.room_area ,cur.kogi_code,cur.structures_id,cur.campus_id,cur.use_isoffice); itable.extend(); itable(itable.count) := roomobj; end loop; return itable; end if; if xtyear > iyear then --使用者輸入的年份為當前年份之前 for hcur in hisrooms loop roomobj :=room(i, i*i,xtyear ,'小於',i+i,'1'); itable.extend(); itable(itable.count) := roomobj; end loop; return itable; end if; end get511;
以上函式沒有寫完,需要自己這邊的表,不能直接呼叫。
要呼叫的話直接
select * from table(get511(2018))
OK。大功告成