oracle 分页 很棒的sql语句

create or replace procedure proc6338196642095312503719(输入新闻主题 varchar2,输入新闻内容 varchar2,输入发布时间 varchar2,输入当前页码 number,输入每页行数 number,输出当前页码 out number,输出总行行数 out number,输出总页页数 out number,输入是否下页 number,输入新闻编号 varchar2,return_cursor out customtype.myrctype)

–功能描述:

–编写人:

–编写日期:

–如果返回结果集,必须使用自定义游标return_cursor

is –or as

–变量定义区

v_cpagecount integer; — 要显示的数据总行数

v_cpage integer; — 要显示数据的当前页

begin

–存储过程主体

if 输入新闻编号 is null then

begin

— 输出总行行数

select max(rownum) into 输出总行行数 from(

select * from xtnews where 1=1

and 输入新闻主题 is null or (输入新闻主题 is not null and v_xwzt like ‘%’||输入新闻主题||’%’)

and 输入发布时间 is null or (输入发布时间 is not null and d_fbsj = to_date(输入发布时间,’yyyy-mm-dd’))

)where 输入新闻内容 is null or (输入新闻内容 is not null and v_xwnr like ‘%’||输入新闻内容||’%’);

— 输出总页页数

select ceil(输出总行行数/输入每页行数) into 输出总页页数 from dual;

exception when no_data_found then

null;

end;

— 计算 输入当前页码 要显示的数据总行数

if 输入当前页码 is not null then

— xia一页

if 输入是否下页 = 1 then

— 计算 获取数据的当前页

v_cpage := (输入当前页码 + 1);

— 最后一页

if v_cpage > 输出总页页数 then

v_cpage := 输出总页页数;

end if;

end if;

— shang一页

if 输入是否下页 = 0 then

— 计算 获取数据的当前页

v_cpage := (输入当前页码 – 1);

— 最前一页

if v_cpage = 0 then

v_cpage := 1;

end if;

end if;

— 要显示的数据总行数

v_cpagecount := v_cpage * 输入每页行数;

end if;

end if;

— 执行查询 获取 要显示的数据

begin

open return_cursor for

select nts.* from(

select nt.* from (

select rownum 序号,n.* from(

select * from(

select * from(

select

i_id 新闻编号,

v_xwzt 新闻主题,

v_xwnr 新闻内容,

d_fbsj 发布时间,

d_yxsj 有效时间,

v_fbbm 发布部门

from xtnews

where 1=1 and 输入新闻主题 is null or (输入新闻主题 is not null and v_xwzt like ‘%’||输入新闻主题||’%’)

)where 输入新闻内容 is null or (输入新闻内容 is not null and 新闻内容 like ‘%’||输入新闻内容||’%’)

)where 输入发布时间 is null or (输入发布时间 is not null and 发布时间 = to_date(输入发布时间,’yyyy-mm-dd’))

)n where 输入新闻编号 is null or (输入新闻编号 is not null and 新闻编号 = 输入新闻编号)

order by rownum

)nt where nt.序号 <= v_cpagecount order by 序号 desc

)nts where nts.序号 > (v_cpagecount-输入每页行数) order by 序号;

exception when no_data_found then

null;

end;

— 输出最后计算的当前页码

if 输入新闻编号 is null and v_cpage is not null then

输出当前页码 := v_cpage;

end if;

end;

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐