0

0

Oracle存储过程分页查询

php中文网

php中文网

发布时间:2016-06-07 17:27:43

|

1160人浏览过

|

来源于php中文网

原创

以下是Oracle存储过程分页查询返回数据集的方法: CREATE OR REPLACE PROCEDURE PROC_GET_DATA_PAGING(P_TABLENAME IN VARCHA

以下是oracle存储过程分页查询返回数据集的方法:

CREATE OR REPLACE PROCEDURE PROC_GET_DATA_PAGING(P_TABLENAME    IN VARCHAR2, --表(视图)名
                                                P_STRWHERE    IN VARCHAR2, --查询条件
                                                P_ORDERCOLUMN  IN VARCHAR2, --排序的列
                                                P_CURPAGE      IN OUT NUMBER, --当前页
                                                P_PAGESIZE    IN OUT NUMBER, --每页显示记录条数
                                                P_TOTALRECORDS OUT NUMBER, --总记录数
                                                P_TOTALPAGES  OUT NUMBER, --总页数
                                                V_CUR          OUT TYPES.CURSORTYPE) --返回的结果集
 IS
  V_SQL        VARCHAR2(4000) := ''; --SQL语句
  V_STARTRECORD NUMBER(10); --开始显示的记录条数
  V_ENDRECORD  NUMBER(10); --结束显示的记录条数
  V_SHOWALL    INTEGER; --是否显示全部记录
BEGIN
  --记录中总记录条数
  V_SQL := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || P_TABLENAME ||
          ' WHERE 1=1 ';
  IF P_STRWHERE IS NOT NULL OR P_STRWHERE '' THEN
    V_SQL := V_SQL || P_STRWHERE;
  END IF;
  EXECUTE IMMEDIATE V_SQL
    INTO P_TOTALRECORDS;

  --验证页面记录大小
  IF P_PAGESIZE     V_SHOWALL  := 1;
    P_PAGESIZE := 0;
  END IF;

  IF V_SHOWALL IS NULL THEN
    --根据页大小计算总页数
    IF MOD(P_TOTALRECORDS, P_PAGESIZE) = 0 THEN
      P_TOTALPAGES := TRUNC(P_TOTALRECORDS / P_PAGESIZE, 0);
    ELSE
      P_TOTALPAGES := TRUNC(P_TOTALRECORDS / P_PAGESIZE, 0) + 1;
    END IF;
 
  ELSE
    P_TOTALPAGES := 1;
 
  END IF;

  --验证页号
  IF P_CURPAGE     P_CURPAGE := 1;
  END IF;
  IF P_CURPAGE > P_TOTALPAGES THEN
    P_CURPAGE := P_TOTALPAGES;
  END IF;

  --实现分页查询
  V_STARTRECORD := (P_CURPAGE - 1) * P_PAGESIZE + 1;
  V_ENDRECORD  := P_CURPAGE * P_PAGESIZE;
  V_SQL        := 'SELECT * FROM (SELECT A.*, ROWNUM R FROM ' ||
                  '(SELECT * FROM ' || P_TABLENAME;
  IF P_STRWHERE IS NOT NULL OR P_STRWHERE '' THEN
    V_SQL := V_SQL || ' WHERE 1=1 ' || P_STRWHERE;
  END IF;
  IF P_ORDERCOLUMN IS NOT NULL OR P_ORDERCOLUMN '' THEN
    V_SQL := V_SQL || ' ORDER BY ' || P_ORDERCOLUMN;
  END IF;
  IF V_SHOWALL IS NULL THEN
    V_SQL := V_SQL || ') A WHERE ROWNUM             ') B WHERE R >= ' || V_STARTRECORD;
  ELSE
    V_SQL := V_SQL || ') A ) B ';
  END IF;

  DBMS_OUTPUT.PUT_LINE(V_SQL);
  OPEN V_CUR FOR V_SQL;
END PROC_GET_DATA_PAGING;

linux

相关专题

更多
php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

4

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 45.4万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号