1 CREATE OR REPLACE PACKAGE PKG_QUERY IS
2
3
4
5 -- Author : ADMINISTRATOR
6 -- Created : 2016/12/8 星期四 10:28:37
7 -- Purpose : 用做查询游标
8
9
10 -- Public type declarations
11 TYPE CUR_QUERY IS REF CURSOR;
12
13
14 END PKG_QUERY;
15
16
17
18
19 CREATE OR REPLACE PROCEDURE prc_query
20 (p_tableName in varchar2, --表名
21 p_strWhere in varchar2, --查询条件
22 p_child_query in varchar2, --子查询
23 p_orderColumn in varchar2, --排序的列
24 p_orderStyle in varchar2, --排序方式
25 p_curPage in out Number, --当前页
26 p_pageSize in out Number, --每页显示记录条数
27 p_totalRecords out Number, --总记录数
28 p_totalPages out Number, --总页数
29 v_cur out pkg_query.cur_query) --返回的结果集
30 IS
31 v_sql VARCHAR2(4000) := ''; --sql语句
32 v_startRecord Number(7); --开始显示的记录条数
33 v_endRecord Number(7); --结束显示的记录条数
34 BEGIN
35 --记录中总记录条数
36 v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' WHERE 1=1';
37 IF p_strWhere IS NOT NULL THEN
38 v_sql := v_sql || p_strWhere;
39 END IF;
40 dbms_output.put_line(v_sql);
41 EXECUTE IMMEDIATE v_sql INTO p_totalRecords;
42 p_totalPages := 0;
43 -- if p_totalRecords <> 0 then
44
45
46 --验证页面记录大小
47 IF p_pageSize < 0 THEN
48 p_pageSize := 0;
49 END IF;
50
51
52 --根据页大小计算总页数
53 IF MOD(p_totalRecords,p_pageSize) = 0 THEN
54 p_totalPages := floor(p_totalRecords / p_pageSize);
55 ELSE
56 p_totalPages := floor(p_totalRecords / p_pageSize) + 1;
57 END IF;
58
59
60
61
62
63
64 --实现分页查询
65 v_startRecord := (p_curPage - 1) * p_pageSize + 1;
66 v_endRecord := p_curPage * p_pageSize;
67 v_sql := 'SELECT b.*,' || p_child_query || ' FROM (SELECT A.*, rownum r FROM ' ||
68 '(SELECT * FROM ' || p_tableName;
69 IF p_strWhere IS NOT NULL THEN
70 v_sql := v_sql || ' WHERE 1=1 ' || p_strWhere;
71 END IF;
72 IF p_orderColumn IS NOT NULL THEN
73 v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
74 END IF;
75 v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
76 || v_startRecord;
77 DBMS_OUTPUT.put_line(v_sql);
78 OPEN v_cur FOR v_sql;
79 -- end if;
80
81
82 END prc_query;

oracle:储存过程实现分页的更多相关文章

  1. oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)

    存储过程 create or replace procedure TestPro(Descerr out varchar2 ) is begin select * from test; excepti ...

  2. oracle储存过程学习笔记

    转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...

  3. 【转】oracle查询用户表,函数,储存过程,

    ◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...

  4. Sql Server分页储存过程

    --分页储存过程if exists (select * from sys.procedures where name='Page')drop proc Pagegocreate proc Page@P ...

  5. sql2005分页储存过程和C#分页类

    1.sql2005分页储存过程 --sql2005,qq524365501 create Procedure up_page2005 ), -- 表名称 ), -- 列 ), -- 主键,用于统计总数 ...

  6. MySQL 储存过程-原理、语法、函数详细说明

    Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...

  7. Oracle和MySql的分页查询区别和PL/SQL的基本概念

    Oracle和MySql的分页查询区别:     Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...

  8. C#函数与SQL储存过程

    一点点小认识作为memo,求指正. C#的函数与SQL的储存过程有很多的相似性, 它们都是一段封闭的代码块,来提高代码的重用性,虽然现在复制粘贴很方便,但是我们在写多个函数的时候频繁的复制粘贴相同的内 ...

  9. SQL获取所有数据库名、表名、储存过程以及参数列表

    SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...

随机推荐

  1. Java + 腾讯邮箱 SSL加密问题 重要通知

    原来的jdk8版本如果不替换jce就会在发邮件的过程中报错,而此次使用的jdk1.8.0_131,并没有出现问题,也就是说,如果你使用的版本是 就不用考虑发邮件因为加密算法而导致的错误了

  2. My thoughts after NOIP 2018(1)

    联赛就这样结束了. 感觉真是奇怪啊.以前看重的东西,像是忽然扔下的包袱,一下子轻了. 而我一直在逃避的,不愿直面的东西,果然终于还是要再次面对了啊. 文化课百废待兴,\(noip\)的最终结果依然未知 ...

  3. 利用Screen重启DevStack服务

    上篇介绍了DevStack如何安装部署.集成化工具有好处,但在系统重启后,OpenStack的各个服务并不会随系统重启而启动,需要利用screen来重启,接下来就记录下如何使用screen. 准备工作 ...

  4. mac安装神器brew

    安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...

  5. elasticsearch索引清理

    只是记录两条简单的命令 查看所有的索引文件: curl -XGET http://localhost:9200/_cat/indices?v 删除索引文件以释放空间: curl -XDELETE ht ...

  6. ruby pluck用法,可以快速从数据库获取 对象的 指定字段的集合数组

    可以快速从数据库获取 对象的 指定字段的集合数组 比如有一个users表,要等到user的id数组: select id from users where age > 20; 要实现在如上sql ...

  7. 使用 Parallel LINQ 进行数据分页

    a)   第一种[耗时11~18s],这种查询方式并不是很优化,但是目前也没有想到更好的方式,除了创建一张中间表,是不是可以使用[全文索引]? SELECT * FROM ( SELECT  ROW_ ...

  8. POJ3233 Matrix Power Series(快速幂求等比矩阵和)

    题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...

  9. gtid_executed和gtid_purged变量是如何初始化的

    一.官方释义 1.1.gtid_executed.gtid_purged https://dev.mysql.com/doc/refman/5.7/en/replication-options-gti ...

  10. Linux 搭建 nexus 私服【转】

    原文:https://yq.aliyun.com/articles/5981 第8章 私服nexus 本章详细介绍了nexus的安装过程,设置maven从私服下载构件,以及发布构件至nexus. 8. ...