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. zTree重命名节点时,操作的那个dom(类似input框那个)怎么写

    <script type="text/javascript"> //tree的编辑节点的方法 ztree.editName(nodeNew[0]); /// $(&qu ...

  2. 第三节,TensorFlow 使用CNN实现手写数字识别(卷积函数tf.nn.convd介绍)

    上一节,我们已经讲解了使用全连接网络实现手写数字识别,其正确率大概能达到98%,这一节我们使用卷积神经网络来实现手写数字识别, 其准确率可以超过99%,程序主要包括以下几块内容 [1]: 导入数据,即 ...

  3. java 中自定义类的概述

    作业: 描述商品类 Goods 4个属性 商品名字 大小 价格 库存 把商品类放进集合中 小米品牌 大小 价格 库存的数量 都存集合 华为..... 魅族 public class Goods{ St ...

  4. PHP依赖倒置和控制反转

    判断代码的好坏,我们有自己的标准:高内聚,低耦合.为了解决这一问题,php中有许多优秀的设计模式,比如工厂模式,单例模式. 而在代码中体现出来的设计模式,就如依赖注入和控制反转. 那什么是依赖注入? ...

  5. 20190417 Spring Security

    参考资料 Spring-Security的4.2.12版本官方文档 Spring Security简介

  6. saltstack安装与配置

    Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得 ...

  7. Spark进阶之路-Spark提交Jar包执行

    Spark进阶之路-Spark提交Jar包执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际开发中,使用spark-submit提交jar包是很常见的方式,因为用spark ...

  8. Nginx的介绍以及编译安装详解

    Nginx的介绍以及编译安装详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx(全称”engine x“)诞生背景 apache主要优点是功能丰富且足够稳定,但是其 ...

  9. 如何在github上下载单个文件

    原文链接:https://www.cnblogs.com/zhaoqingqing/p/5534827.html 找到目标文件,打开,会看到raw,右键,目标另存为.ok

  10. synchronized的一些记录

    1.方法内的私有变量,不存在线程安全问题.非线程安全问题存在于实例变量(全局变量)中 2.在方法上加synchronized表示,当第一个线程进入时方法加锁(其他方法无法调用) 3.synchroni ...