oracle in 分页,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值