Oracle存储过程,以游标的方式返回一个记录集

 


-- 创建一个包
create   or   replace  package types
as
type cursorType 
is  ref  cursor ;
end  types;

-- 创建存储过程,游标类型返回参数
create   or   replace   procedure  SP_Fee_Instance(v_company  in   varchar , v_sdate  in  nvarchar2, v_edate  in  nvarchar2,p_cursor  in  out types.cursorType)  is
--  vs_sql   varchar2(2000);
--
company    varchar2(100);  --公司编码
--
start_date varchar2(10);   --计划付款时间段[起]
--
end_date   varchar2(10);   --计划付款时间段[止]
begin

IF  NVL(v_company, '   ' <>   '   '   THEN
     
OPEN  p_cursor  FOR
        
select  a.company,a.pact_name,a.pact_code,i.payment_date, sum (i.payment_fee)  as  payment_fee,i.payment_condition,i.payment_remark 
        
from  htgl_pact_apply a 
        
inner   join  htgl_fee_instance i  on  a.apply_id  =  i.apply_id
        
where  a.payment_status = 2          
        
and  a.company  =  v_company  
        
and  i.payment_date  between  to_date(v_sdate, ' YYYY-MM-DD ' and  to_date(v_edate, ' YYYY-MM-DD ' )
        
group   by  a.company,a.pact_name,a.pact_code,i.payment_date,i.payment_condition,i.payment_remark;
     
null ;
       
       
--  dbms_output.put_line(company);
        --  dbms_output.put_line(start_date);

   
ELSE
     
OPEN  p_cursor  FOR
        
select  a.company,a.pact_name,a.pact_code,i.payment_date, sum (i.payment_fee)  as  payment_fee,i.payment_condition,i.payment_remark 
        
from  htgl_pact_apply a 
        
inner   join  htgl_fee_instance i  on  a.apply_id  =  i.apply_id
        
where  a.payment_status = 2          
        
and  i.payment_date  between  to_date(v_sdate, ' YYYY-MM-DD ' and  to_date(v_edate, ' YYYY-MM-DD ' )
        
group   by  a.company,a.pact_name,a.pact_code,i.payment_date,i.payment_condition,i.payment_remark;
      
null ;
   
END   IF ;
       
--  EXECUTE IMMEDIATE vs_sql;
--
 EXECUTE IMMEDIATE vs_sql  into i;

end  SP_Fee_Instance;

-- 下面是调用方法
--
execute SP_Fee_Instance('ass','','')


注意:
参数变量名称与数据表中字段名称不能同名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值