Asp.net中,用Oarcle存贮过程实现,高效率翻页

本文介绍了一种提高大数据量翻页效率的方法,通过自定义过程仅获取当前页面所需的数据,显著提升了GridView的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其本原理:
因为GridView自带的翻页功能效率太低,因此想到自己做一个翻页功能,原理很简单,就是每次取数据时,只取出当页的数据,每次要传入检索用SQL文、当前页和明细中显示记录的行数,通过turn_page过程的加工后,得到只取当页数据的SQL文。
  1. create or replace package GP_ZhuoQiju is
  2.     /* 
  3.         翻页共通
  4.         wv_sql           -> 检索用SQL文
  5.         wn_current_page  -> 当前页
  6.         wn_detail_count  -> 明细中显示记录行数
  7.         wn_total_count   -> 记录总行数
  8.         wn_page_count    -> 总页数
  9.         wv_result_sql    -> 处理后返回的SQL文
  10.         
  11.         概要:为了大数据量翻页不至于很慢,所以每次只取得当页的记录
  12.     */
  13.     procedure turn_page(
  14.         wv_sql in varchar2,
  15.         wn_current_page in number default 1,
  16.         wn_detail_count in number default 10,
  17.         wn_total_count out number,
  18.         wn_page_count out number,
  19.         wv_result_sql out varchar2
  20.     );
  21. end GP_ZhuoQiju;
  22. /
  23. create or replace package body GP_ZhuoQiju is
  24.     /* 翻页共通 */
  25.     procedure turn_page(
  26.         wv_sql in varchar2,
  27.         wn_current_page in number default 1,
  28.         wn_detail_count in number default 10,
  29.         wn_total_count out number,
  30.         wn_page_count out number,
  31.         wv_result_sql out varchar2
  32.     ) is
  33.         -- SQL文
  34.         lv_sql varchar2(32767);
  35.         
  36.         -- 结果集的记录开始行数
  37.         ln_row_from number;
  38.         
  39.         -- 结果集的记录结束行数
  40.         ln_row_to   number;
  41.     begin
  42.         
  43.         -- 计算出总记录行数
  44.         lv_sql := 'select count(*) from ( ' || wv_sql || ' )';
  45.         execute immediate lv_sql into wn_total_count;
  46.         -- 根据当前页和明细显示的件数,算出开始数和结束数
  47.         -- 开始数的计算为:(当前页 - 1)* 明细件数 + 1
  48.         -- 结束数的计算为:开始数 + 明细件数 - 1 
  49.         ln_row_from := (wn_current_page - 1) * wn_detail_count + 1;
  50.         ln_row_to := ln_row_from + wn_detail_count -1;
  51.         -- 对原有SQL进行加工,取出rownum,用于取出一部分数据
  52.         lv_sql :=
  53.         'select *
  54.            from (select t.*, rownum as rownumber from ( || wv_sql || ' ) t)
  55.           where rownumber between || ln_row_from || ' and ' || ln_row_to;
  56.         -- 计算出总页数
  57.         wn_page_count := ceil(wn_total_count / wn_detail_count);
  58.         
  59.         -- 返回加工后的SQL文
  60.         wv_result_sql := lv_sql;
  61.     end turn_page;
  62. end GP_ZhuoQiju;
  63. /
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值