要求:拼接数据,作为多条数据返回。
1、创建类型:
create or replace type bb_ptyxztqk_Type as object( d_index number, d_name varchar2(100), d_this number, d_last number, d_minus number )
2、创建表类型:
create or replace type bb_ptyxztqk_Table as table of bb_ptyxztqk_type
3、package:
create or replace package bb_ptyxztqk is type type_cursor is ref cursor; PROCEDURE pro_getdata(enddate in varchar2, cur out type_cursor); end bb_ptyxztqk;
4、packagebody:
create or replace package body bb_ptyxztqk is -- Function and procedure implementations cur out type_cursor PROCEDURE pro_getdata(enddate in varchar2, cur out type_cursor) is Type RecType Is Record( r_index number, r_name varchar2(100), r_this number, r_last number, r_minus number); Type TabType Is Table Of RecType Index By Binary_Integer; myTab TabType; obj_type_tab bb_ptyxztqk_table := bb_ptyxztqk_table(); l_index number := 1; p_enddate date := to_date(enddate,'yyyy-mm-dd hh24:mi:ss'); l_value number(18,0); l_value_last number(18,0); begin --------------------------------1------------------------------- myTab(l_index).r_index := l_index; myTab(l_index).r_name := '第一条数据'; --查询数据 select count(1) into l_value from t_company c; myTab(l_index).r_this := l_value; select count(1) into l_value_last from t_company c where (c.c_createdate <= p_enddate or c.c_createdate is null); myTab(l_index).r_last := l_value_last; myTab(l_index).r_minus := l_value - l_value_last; l_index := l_index + 1; --------------------------------2------------------------------- myTab(l_index).r_index := l_index; myTab(l_index).r_name := '第二条数据'; --查询数据 select count(1) into l_value from t_supplier; myTab(l_index).r_this := l_value; select count(1) into l_value_last from t_supplier s where s.c_createdate <= p_enddate; myTab(l_index).r_last := l_value_last; myTab(l_index).r_minus := l_value - l_value_last; l_index := l_index + 1; --赋值 l_index := myTab.First; for l_in in l_index .. myTab.count Loop obj_type_tab.EXTEND; obj_type_tab(obj_type_tab.LAST) := bb_ptyxztqk_type(myTab(l_index).r_index, myTab(l_index).r_name, myTab(l_index).r_this, myTab(l_index).r_last, myTab(l_index).r_minus); l_index := myTab.Next(l_index); end Loop; open cur for select * from table(obj_type_tab); end; end bb_ptyxztqk;