惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
月光博客
月光博客
M
MIT News - Artificial intelligence
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网

博客园 - 钛网络

真正部署中的apache+tomcat负载均衡 MSSQL处理死锁存储过程 GridView使用大全 打印机每天都要重新连接 数据库安装时挂起问题 在运行 32 位版本的 SQL Server 2000 SP4 的计算机上启用 AWE 时有些内存不可用 SQL Server 2000安装故障 关于asp.net 2.0的认知太少的问题 SQL 操作————简单查询初探 SQL 操作————不等联接 SQL SERVER中直接循环写入数据 SQL Server日期计算 SQL Server安全规划全攻略 SQL Server:创建索引视图 SQL Server 2000的安全配置 ASP.NET文件上传下载 ASP.Net生成静态HTML页 2 ASP.NET上传文件的实例 ASP.NET封装的数据库访问基类
Oracle大数据量分页通用存储过程
钛网络 · 2005-12-21 · via 博客园 - 钛网络

type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集

/*****************************************************************
 *功能描述: 大数据量分页通用存储过程
 *创 建 人: 夏春涛 xchuntao@163.com qq:23106676
 *创建时间: 2005-06-29
 *****************************************************************/
procedure sp_Page(p_PageSize int,          --每页记录数
                  p_PageNo int,            --当前页码,从 1 开始
                  p_SqlSelect varchar2,    --查询语句,含排序部分
                  p_OutRecordCount out int,--返回总记录数
                  p_OutCursor out refCursorType)
as
    v_sql varchar2(3000);
    v_count int;
    v_heiRownum int;
    v_lowRownum int;
begin
  ----取记录总数
  v_sql := 'select count(*) from (' || p_SqlSelect || ')';
  execute immediate v_sql into v_count;
  p_OutRecordCount := v_count;
  ----执行分页查询
  v_heiRownum := p_PageNo * p_PageSize;
  v_lowRownum := v_heiRownum - p_PageSize + 1;

  v_sql := 'SELECT *
            FROM (
                  SELECT A.*, rownum rn
                  FROM  ('|| p_SqlSelect ||') A
                  WHERE rownum <= '|| to_char(v_heiRownum) || '
                 ) B
            WHERE rn >= ' || to_char(v_lowRownum) ;
            --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 
  OPEN p_OutCursor FOR  v_sql;

end sp_Page;

/*****************************************************************
 *功能描述: 大数据量分页通用存储过程(重载1,推荐使用)
 *创 建 人: 夏春涛
 *创建时间: 2005-07-01
 *****************************************************************/
procedure sp_Page(p_PageSize int,          --每页记录数
                  p_PageNo int,            --当前页码,从 1 开始
                  p_SqlSelect varchar2,    --查询语句,含排序部分
                  p_SqlCount varchar2,     --获取记录总数的查询语句
                  p_OutRecordCount out int,--返回总记录数
                  p_OutCursor out refCursorType)
as
    v_sql varchar2(3000);
    v_count int;
    v_heiRownum int;
    v_lowRownum int;
begin
  ----取记录总数
  execute immediate p_SqlCount into v_count;
  p_OutRecordCount := v_count;
  ----执行分页查询
  v_heiRownum := p_PageNo * p_PageSize;
  v_lowRownum := v_heiRownum - p_PageSize + 1;

  v_sql := 'SELECT *
            FROM (
                  SELECT A.*, rownum rn
                  FROM  ('|| p_SqlSelect ||') A
                  WHERE rownum <= '|| to_char(v_heiRownum) || '
                 ) B
            WHERE rn >= ' || to_char(v_lowRownum) ;
            --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 
  OPEN p_OutCursor FOR  v_sql;

end sp_Page;

/*****************************************************************
 *功能描述: 大数据量分页通用存储过程(重载2)
 *创 建 人: 夏春涛
 *创建时间: 2005-07-01
 *****************************************************************/
procedure sp_Page(p_PageSize int,        --每页记录数
                  p_PageNo int,          --当前页码,从 1 开始
                  p_SqlSelect varchar2,  --查询语句,含排序部分
                  p_OutCursor out refCursorType)
as
    v_sql varchar2(3000);
    --v_count int;
    v_heiRownum int;
    v_lowRownum int;
begin
/*
  ----取记录总数
  v_sql := 'select count(*) from (' || p_SqlSelect || ')';
  execute immediate v_sql into v_count;
  p_OutRecordCount := v_count;
*/
  ----执行分页查询
  v_heiRownum := p_PageNo * p_PageSize;
  v_lowRownum := v_heiRownum - p_PageSize + 1;

  v_sql := 'SELECT *
            FROM (
                  SELECT A.*, rownum rn
                  FROM  ('|| p_SqlSelect ||') A
                  WHERE rownum <= '|| to_char(v_heiRownum) || '
                 ) B
            WHERE rn >= ' || to_char(v_lowRownum) ;
            --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 
  OPEN p_OutCursor FOR  v_sql;

end sp_Page;