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. NO.11 复制时勿忘其每个成分

    1.Coping 函数应该确保复制对象内的"每一个成员变量",和调用合适的 "base class"构造函数(base class 某些成员往往是private ...

  2. C# TextBox猜想输入和历史记录输入

    什么是猜想输入 当我们在使用查询应用时,输入某个关键字后文本框下面就会自动弹出跟此关键字相附的词组供我们选择,为我们节省了输入的时间,这就是猜想输入,例如:百度,谷歌,等等,如下图: 如上图所示,使用 ...

  3. Scala进阶之路-统计商家id的标签数以及TopN示例案例分析

    Scala进阶之路-统计商家id的标签数以及TopN示例案例分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 将“temptags.txt”中的数据进行分析,统计出 ...

  4. 常用的css文件

    reset.css(几乎每个项目都要引入的css) @charset "utf-8";html{background-color:#fff;color:#000;font-size ...

  5. cdqz2017-test11-奇诺之旅(拟阵)

    解为基环树森林 证明其具有拟阵的性质: 1.空集独立 2.基环树森林的子集仍然是基环树森林,满足遗传特性 3.对于基环树森林A,B,若|A|<|B| (边数),一定可以找到一条边e∈B,∉A,使 ...

  6. 获取客户端的请求IP地址

    获取客户端的请求IP地址 package com.microClass.util; import javax.servlet.http.HttpServletRequest; import java. ...

  7. bean之间的继承和依赖关系

    继承Bean配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean 子Bean从父Bean中继承配置,包括Bean的属性配置 子Bean可 ...

  8. 绘图QPainter-字体

    方式一: import sys from PyQt5.QtGui import QPainter, QFont,QPen from PyQt5.QtWidgets import QApplicatio ...

  9. 字体QFont

    import sys from PyQt5.QtWidgets import QApplication, QWidget,QLabel from PyQt5.QtGui import QFont fr ...

  10. C语言中#ifdef,#ifndef和#endif的作用

    现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...