oracle编写分页过程
有了上面的基础,相信大家可以完成分页存储过程了,要求,请大家编写一个存储过程,要求可以输入表名、每页显示记录数、当前页、排序字段(deptno降序)。返回总记录数,总页数和返回结果集。
把一个字符串,当作sql语句执行,并把查询得到到结果赋给某个变量,语法如下:
execute immediate v_sql into myrows;
--1.建包,使用游标类型
create or replace package pack1 is
type my_cursor is ref cursor;
end;
--2.编写过程
create or replace procedure fenyepro(
v_in_table in varchar2,v_in_pagesize in number,v_in_pagenow in number,
v_out_result out pack1.my_cursor) is
--定义变量
v_sql varchar2(2000);
v_start number;
v_end number;
begin
--指向代码
--计算V_start和v_end是多少
v_start:=v_in_pagesize*(v_in_pagenow-1)+1;
v_end:=v_in_pagesize*v_in_pagenow;
v_sql:='select t2.* from (select t1.*,rownum rn from (select * from '
||v_in_table||') t1 where rownum<='||v_end||') t2 where rn>='||v_start;
--打开游标,让游标指向结果集
open v_out_result for v_sql;
end;
在java中调用
package com.lsz.test;
import java.sql.*;
public class TestProcedure2 {
public static void main(String[] args) {
Connection ct=null;
CallableStatement cs=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");
cs=ct.prepareCall("{call fenyepro(?,?,?,?)}");
cs.setString(1, "emp");
cs.setInt(2, 6);
cs.setInt(3,2);
//给第四个问好注册
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
//这里是关键
rs=(ResultSet)cs.getObject(4);
while(rs.next()){
System.out.println(rs.getString("ename")+" "+rs.getString("sal"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
}
n 对分页过程进行扩展,目的是让分页过程更加灵活,更加实用
要求,请大家编写一个存储过程,要求可以输入表名、每页显示记录数、当前页,返回的结果集,返回共有多少页,返回共有多少条记录。
create or replace procedure fenyepro2(
v_in_table in varchar2,v_in_pagesize in number,v_in_pagenow in number,
v_out_result out pack1.my_cursor,
v_out_rows out number,
v_out_pagecount out number) is
--定义变量
v_sql varchar2(2000);
v_start number;
v_end number;
begin
--指向代码
--计算V_start和v_end是多少
v_start:=v_in_pagesize*(v_in_pagenow-1)+1;
v_end:=v_in_pagesize*v_in_pagenow;
v_sql:='select t2.* from (select t1.*,rownum rn from (select * from '
||v_in_table||') t1 where rownum<='||v_end||') t2 where rn>='||v_start;
--打开游标,让游标指向结果集
open v_out_result for v_sql;
--查询共有多少条计算
select count(*) into v_out_rows from emp;
if mod(v_out_rows,v_in_pagesize)=0 then
v_out_pagecount:=v_out_rows/v_in_pagesize;
else
v_out_pagecount:=v_out_rows/v_in_pagesize+1;
end if;
end;
在java中调用
package com.lsz.test;
import java.sql.*;
public class TestProcedure2 {
public static void main(String[] args) {
Connection ct=null;
CallableStatement cs=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");
cs=ct.prepareCall("{call fenyepro2(?,?,?,?,?,?)}");
cs.setString(1, "emp");
cs.setInt(2, 6);
cs.setInt(3,2);
//给第四个问号注册
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR);
//给第五个问号注册
cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
//给第六个问号注册
cs.registerOutParameter(6,oracle.jdbc.OracleTypes.INTEGER);
cs.execute();
//这里是关键
rs=(ResultSet)cs.getObject(4);
while(rs.next()){
System.out.println(rs.getString("ename")+" "+rs.getString("sal"));
}
//取出记录数
int rowCount=cs.getInt(5);
System.out.println("记录总数是:"+rowCount);
int pageCount=cs.getInt(6);
System.out.println("总页数是:"+pageCount);
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
}
n 分页过程练习——课堂练习
提示:做一个基于oracle的雇员管理系统
具体完成的功能如下:
查看所有雇员的成绩——VIEW(查看要使用过程来完成,当用户输入view后提示用户输入查看第几页,每页显示几条记录,排序关键列)
按照雇员ID号码查询学生成绩——view of
添加一个雇员——add
按照id更改一个雇员的信息——change
按照id去删除一个雇员——remove
退出系统——exit
oracle编写分页过程的更多相关文章
- oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
顺序控制语句1 goto建议不要使用 declare i number:=; begin loop dbms_output.put_line(i); then goto end_loop; end i ...
- Oracle基础(五)pl/sql进阶(分页过程)
编写分页过程 通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标.怎样在java中调用等内容的学习. 1.无返回值 ...
- Oracle的分页查询语句优化
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一) 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT ...
- Oracle通用分页存储过程的创建与使用
Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结 ...
- 对于Oracle中分页排序查询语句执行效率的比较分析
转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...
- Oracle中函数/过程返回结果集的几种方式
原文 Oracle中函数/过程返回结果集的几种方式 Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. ...
- Oracle中分页查询语句
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...
- Oracle 创建分页存储过程(转帖)
原贴地址:http://19880614.blog.51cto.com/4202939/1316560 ps:源代码还有很多错误,我修改了 ------------------------------ ...
- oracle sql 分页
Oracle实现分页时,需要引入一个rownum的函数,rownum可以给记录一个类似于id的字段. 以下收整理了常用的几种sql分页算法,数据库以Oracle中emp为例.查询结果如下: SQL&g ...
随机推荐
- bash: express: command not found及vue连接数据库调接口
今天在使用express -e . 的命令时,cmd给我报了一段不识别的错误: bash: express: command not found ,在网上查了一下,有人指出是express4的版本将命 ...
- PAT甲级——A1045 Favorite Color Stripe
Eva is trying to make her own color stripe out of a given one. She would like to keep only her favor ...
- DLINK 企业路由器内网部署web开启端口转发后还需要开启是否支持端口回流功能
跑后台使用的服务器,配置一般都很低,带宽只有2Mb 一些大型文件比如app的更新包使用这种服务器不可行 但是公司的网络是100Mb对等静态ip专线 所以能利用起来,每年将会省下8万块 说干就干,这个步 ...
- JSP-案例-商品增删改
商品的增删改查 1显示 部分代码 Dao public List<Product> findAllProduct() throws SQLException { QueryRunner r ...
- LINUX用户身份切换
Su 命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码. 使用方式 su [-fmp] [-c command] [-s shell] [--help] [--ver ...
- Leetcode80. Remove Duplicates from Sorted Array II删除排序数组中的重复项2
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 ...
- Linux程序包管理初步-rpm的使用
在Linux系统上,一般而言,对于程序包管理器来说分为三类: debian:dpt,dpkg; (程序包后缀.deb) rhel:rpm (程序包后缀.rpm) suse:rp ...
- Redis源码解析:28集群(四)手动故障转移、从节点迁移
一:手动故障转移 Redis集群支持手动故障转移.也就是向从节点发送"CLUSTER FAILOVER"命令,使其在主节点未下线的情况下,发起故障转移流程,升级为新的主节点,而原 ...
- Java数据结构和算法(八)--红黑树与2-3树
红黑树规则: 1.每个节点要么是红色,要么是黑色 2.根节点都是黑色节点 3.每个叶节点是黑色节点 3.每个红色节点的两个子节点都是黑色节点,反之,不做要求,换句话说就是不能有连续两个红色节点 4.从 ...
- TZ_10_spring-sucrity 服务器和页面的权限控制
1.在服务器端我们可以通过Spring security提供的注解对方法来进行权限控制. Spring Security在方法的权限控制上支持三种类型的注解,JSR-250注解.@Secured注解和 ...