oracle返回临时表,存储过程返回临时表的问题

嗯,如果没有复杂计算,建议直接用ref cursor。

create or replace package pkg_rome_in_out as

--************************************************

-- ** Get login and logout information of site.

-- ** In parameters: S_RQ

-- ** In parameters: E_RQ

-- ** In parameters: RDC_ID

-- ** In parameters: BRANCH_ID

-- ** In parameters: SITE_NO

-- ** In parameters: PAGE_NO

-- ** Returns:Ref Cursor

-- ** p_in_out_site:Ref Cursor(s_rq,e_rq,online_time)

-- ** p_in_out_branch:Ref Cursor(site_no,s_rq,e_rq,online_time)

-- ** p_in_out_rdc:Ref Cursor(site_no,s_rq,e_rq,online_time)

-- ************************************************

type t_ref is ref cursor;

procedure p_in_out_site(srq in date,erq in date,rdcid in varchar2,siteno in varchar2,page_no in number,num out number,cur_ref out t_ref);

--procedure p_in_out_branch(s_rq in date,e_rq in date,rdcid in varchar2,branchid in varchar2,page_no in number,online_time out varchar,cur_ref out t_ref);

--procedure p_in_out_rdc(s_rq in date,e_rq in date,rdcid in varchar2,page_no in number,online_time out varchar,cur_ref out t_ref);

end pkg_rome_in_out;

/

create or replace package body pkg_rome_in_out as

procedure p_in_out_site(srq in date,erq in date,rdcid in varchar2,siteno in varchar2,page_no in number,num out number,cur_ref out t_ref) is

begin

if page_no is null or page_no<0 then

return;

end if;

select count(*) into num from site_login_logout

where rq >= srq

and rq <= erq

and rdc_id = rdcid

and site_no = siteno;

if page_no = 0 then

open cur_ref for 'select to_char(s_rq,''yyyy-mm-dd hh24:mi:ss'') s_rq,to_char(e_rq,''yyyy-mm-dd hh24:mi:ss'') e_rq,

trunc((e_rq-s_rq)*24)||''小时''||lpad(round(mod((e_rq-s_rq)*(24)*60,60),0),2,''0'')||''分'' online_time

from site_login_logout

where rq >= :s_rq

and rq <= :e_rq

and rdc_id = :rdc_id

and site_no = :site_no

order by rq' using srq,erq,rdcid,siteno;

else

open cur_ref for 'select /*+ FIRST_ROWS */ to_char(s_rq,''yyyy-mm-dd hh24:mi:ss'') s_rq,to_char(e_rq,''yyyy-mm-dd hh24:mi:ss'') e_rq,

trunc((e_rq-s_rq)*24)||''小时''||lpad(round(mod((e_rq-s_rq)*(24)*60,60),0),2,''0'')||''分'' online_time

from (select rownum rn,s_rq,e_rq from site_login_logout

where rq >= :s_rq

and rq <= :e_rq

and rdc_id = :rdc_id

and site_no = :site_no

and rownum <= :row_e

order by rq)

where rn >= :row_s'

using srq,erq,rdcid,siteno,page_no*fn_get_system_config('ROWS_PER_PAGE'),(page_no - 1)*fn_get_system_config('ROWS_PER_PAGE')+1;

end if;

exception when others then

null;

end p_in_out_site;

end pkg_rome_in_out;

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值