oracle 分页 很棒的sql语句

 更新时间:2009年07月01日 22:37:28   作者:  
oracle 分页 很棒的实现方法,大家可以分析下。
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;

相关文章

  • 一文解决ORA-01034: ORACLE not available报错

    一文解决ORA-01034: ORACLE not available报错

    这篇文章主要给大家介绍了关于ORA-01034: ORACLE not available报错解决的相关资料,这是oracle数据库启动经常会遇到的问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Oracle 如何创建和使用全文索引

    Oracle 如何创建和使用全文索引

    Oracle实现全文检索,其机制其实很简单。即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为 term)找出来,记录在一组 以dr$开头的表中,同时记下该term出现的位置、次数、hash 值等信息。
    2016-05-05
  • oracle 存储过程返回 结果集 table形式的案例

    oracle 存储过程返回 结果集 table形式的案例

    这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Linux 7下脚本安装配置oracle 11g r2教程

    Linux 7下脚本安装配置oracle 11g r2教程

    这篇文章主要为大家详细介绍了Linux 7下脚本安装配置oracle 11g r2教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • oracle 声明游标(不具备字段)规则应用

    oracle 声明游标(不具备字段)规则应用

    在开发过程中可能会声明一个含有某张表不具备字段的游标,来解决特殊问题,本文将详细介绍这类问题,需要了解更多的朋友可以参考下
    2012-11-11
  • Oracle如何设置表空间数据文件大小

    Oracle如何设置表空间数据文件大小

    这篇文章主要介绍了Oracle如何设置表空间数据文件大小,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Oracle中行列转换有哪些方法

    Oracle中行列转换有哪些方法

    这篇文章主要给大家介绍了关于Oracle中行列转换有哪些方法的相关资料,最近在工作中遇到了涉及到数据库行列之间相互转换的问题,所以这里给大家总结介绍下,需要的朋友可以参考下
    2023-08-08
  • Oracle 数据库中的全文搜索整体流程分析

    Oracle 数据库中的全文搜索整体流程分析

    Oracle 是一种功能强大的关系型数据库管理系统,它提供了各种功能来处理和管理大量的数据,这篇文章主要介绍了Oracle 数据库中的全文搜索功能,需要的朋友可以参考下
    2024-04-04
  • PL/SQL 类型格式转换

    PL/SQL 类型格式转换

    PL/SQL 类型格式转换...
    2007-03-03
  • Oracle游标的使用实例详解

    Oracle游标的使用实例详解

    这篇文章主要给大家介绍了关于Oracle游标使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或着工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09

最新评论