oracle:储存过程实现分页
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:储存过程实现分页的更多相关文章
- oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)
存储过程 create or replace procedure TestPro(Descerr out varchar2 ) is begin select * from test; excepti ...
- oracle储存过程学习笔记
转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...
- 【转】oracle查询用户表,函数,储存过程,
◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...
- Sql Server分页储存过程
--分页储存过程if exists (select * from sys.procedures where name='Page')drop proc Pagegocreate proc Page@P ...
- sql2005分页储存过程和C#分页类
1.sql2005分页储存过程 --sql2005,qq524365501 create Procedure up_page2005 ), -- 表名称 ), -- 列 ), -- 主键,用于统计总数 ...
- MySQL 储存过程-原理、语法、函数详细说明
Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...
- Oracle和MySql的分页查询区别和PL/SQL的基本概念
Oracle和MySql的分页查询区别: Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...
- C#函数与SQL储存过程
一点点小认识作为memo,求指正. C#的函数与SQL的储存过程有很多的相似性, 它们都是一段封闭的代码块,来提高代码的重用性,虽然现在复制粘贴很方便,但是我们在写多个函数的时候频繁的复制粘贴相同的内 ...
- SQL获取所有数据库名、表名、储存过程以及参数列表
SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...
随机推荐
- 约会 音频mm教你追女孩
微信吧地址发给他人. 美团提前选好环境然后提前打电话订购一个位置. 微博作用是为:更多的谈资.热搜 ,最近上榜的话题说. 打车软件: 地图: 2.外表: 下澡,指甲,胡子,发型,适合服装.发型和服装搭 ...
- php 开启 opcache 之后 require、include 还会每次都重新加载文件吗?
当前目录有以下两个文件 index.php <?php var_dump(require 'A.php'); A.php <?php return 123; 接着运行: php -S 0. ...
- 使用ROP攻击绕过Windows的DEP
使用ROP攻击绕过Windows的DEP 基础知识 DEP DEP(Data Execution Prevention)意为数据执行保护,是Windows的一项安全机制,主要能够在内存上执行额外检查以 ...
- Linux系统下yum镜像源环境部署记录
之前介绍了Linux环境下本地yum源配置方法,不过这个是最简单最基础的配置,在yum安装的时候可能有些软件包不够齐全,下面说下完整yun镜像源系统环境部署记录(yum源更新脚本下载地址:https: ...
- 将SQL SERVER中查询到的数据导成一个Excel文件
-- ====================================================== T-SQL代码: EXEC master..xp_cmdshell 'bcp 库名. ...
- JavaSE学习总结(四)——Java面向对象十分钟入门
面向对象编程(Object Oriented Programming,OOP)是一种计算机模拟人类的自然思维方式的编程架构技术,解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题.Ja ...
- webStorm2018激活的方法
问题 激活 webstorm 2018 最新版 解决步骤 License server:http://im.js.cn:8888
- clip:rect()
写进度条的时候用过这个方法,记录一下 它的用法是 .test{ clip: rect(<top>, <right>, <bottom>, <>left) ...
- DPM 目标检测1
1. Origin 原始目标检测: HOG梯度模型+目标匹配 为了提过对目标形变的鲁棒性(多视角->多组件): 目标形态多样性—>多个模型 目标的动态变化多视角—> 子模型 目标形变 ...
- python 新式类的 __getattribute__
这个方法定义在object中,所以所有的新式类都继承有该方法,所有的新式类的实例在获取属性value的时候都会调用该方法,为了验证这一结论,我们重写一下该方法: class C(object): a ...