存储过程之用返回多条数据一

要求:拼接数据,作为多条数据返回。

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;


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值