编写分页过程

        通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标。怎样在java中调用等内容的学习。

1、无返回值的存储过程

比如 1、能够向book表加入书,

---建表

Create table book(bookId number,bookName varchar2(50),publishHouse
varchar2(50));

--编写过程 in
表示变量为输入值。假设不写默觉得输入值,而不是输出变量,out为输出值

Create or replace procedure  sp_pro7(spBookId in number,spbookName in varchar2,sppublishHouse in  varchar2)is

Begin

Insert into book valuse(spBookId ,spbookName,sppublishHouse  );

End

---java
中怎样调用

Package com.sp;
Importjava.sql.*;
Publicclass Test1{
public static void main(string[] args){ try{
//1载入驱动
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
//2创建callablestatement
Callablestatement cs=ct.preparecall(“{call sp_pro7(?,?,? )}”)。
//给?赋值
Cs.setInt(1,10);
Cs.setstring(2。“笑傲江湖”);
Cs.setstring(3,"人民出版社");
//运行
Cs.execute();; }
Catch(EXCEPTION E){
e.printstacktrace(); }
Finally{
关闭各个链接 } } }

2、有返回值的存储过程

比如输入书编号返回书姓名

Create or replace  procedure sp_pro8(spno in number,spkName out varchar2,spsal
out varchar2) is

Begin

select  ename
,spsal,into spName, spsal form emp where empno=spno;

End

在java中怎样调用

Package com.sp;
Importjava.sql.*;
Publicclass Test1{
public static void main(string[] args){ try{
//1载入驱动
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
//2创建callablestatement
Callablestatement cs=ct.preparecall(“{call sp_pro8(?,?)}”);
//给?赋值
Cs.setInt(1,7788);
Cs.registerOutParemeter(2,oracle.jdbc.oracleTyps.varchar)//运行
Cs.registerOutParemeter(3,oracle.jdbc.oracleTyps.double)//运行 //oracle.jdbc.oracleTyps.varchar 表示运行的类型
Cs.execute();
//取出返回值,要注意?顺序
String name=sc.getstring(2);
String job=cs.getstring(3);
System.out.println(“7788的名字”+name +“7788的工资”+sal); }
Catch(EXCEPTION E){
e.printstacktrace(); }
Finally{
关闭各个链接 } } }

3、有返回值的存储过程,以列表结果集的形式返回

oracle存储过程本身没有返回时用out參数替代的。集合须要用package

--建立包,定义类型test_cursor

Create or replace packagetestpackage as

Typetest_cursur is
ref cursor;

End testpackage

建立存储过程

Create or repalce procedure sp_pro9(spNo in number,P_cursor out tespackage,test_cursor) is

begin

Open p_cursor for select *from emp where depto-spNo;

End;

--怎样在java中调用

Package com.sp;
Importjava.sql.*;
Publicclass Test1{
public static void main(string[] args){ try{
//1载入驱动
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
//2创建callablestatement
Callablestatement cs=ct.preparecall(“{call sp_pro9(?,? )}”);
//给?赋值
Cs.setInt(1,10);
Cs.registerOutParemeter(2,oracle.jdbc.oracleTypes.cursor)
    //运行
Cs.execute();
//取出返回值,要注意?顺序
ResultSet rs=(ResultSet)cs.getObject(2);
While (rs.next()){
system.out.println(rs.getInt(1)+""+rs.getString(2));
} }
Catch(EXCEPTION E){
e.printstacktrace();
}
Finally{
关闭各个链接 } } }

4、----oracle的分页规律介绍

Sql>select t1.*。
rownum rn from(select * from emp) t1;

Sql>select  t1.*,
rownum rn from(select * from emp) t1 where rownum<=10;

--在分页的时候。能够

Select *from(

Sql>select t1.*,
rownum rn from(select * from emp) t1where rownum<=10;) where rn>=6;

--开发一个包

Create or replace package  testpackage as

Typetest_cursur is
ref cursor;

End  testpackage

5、--编写分写的过程  分页并按工资排序

Create or replace procedure  fenye

(tableName in varchar2,

Pagesize in number,

Pagenow in number,

Myrows out number,--总记录数

mypageCount out number,--总页数

p_cursor out
testpackage.test_cursor --返回的记录集

) is

--定义部分

--定义sql语句
字符串

v_sql varchar2(1000);

-  定义两个整数

v_begin number:= (Pagenow-1)*Pagesize +1;

v_endnumber:=Pagenow *Pagesize ;

Begin

--运行部分

v_sql:='Select * from(

Sql>select t1.*,
rownum rn from(select * from '||tableName||' order by sal) t1 where
rownum<='||v-      end||';) where
rn>='||v_begin||';'

- -打开游标和sql关联

Open p_cursor for v_sql;

--计算Myrows

mypageCount

--组织一个sql

v_sql:='select count(*) from '|tablename|;

--运行sql,并把返回的值,赋给myrows;

Executeimmediate v_sql into myrows;

-计算mypagecount

If  mod(myrows,pagesize)=0 then

Mypagecount:=myrows/pagesize;

Else

Mypagecount:=myrows/pagesize+1;

End if;

--关闭游标

Close p_cursor;

End;

--使用java測试

Package com.sp;
Importjava.sql.*;
Public class Test1{
public static void main(string[] args){ try{
//1载入驱动<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
Class.forName("Oracle.jdbc.driver.OracleDriver");<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
//2创建callablestatement
Callablestatement cs=ct.preparecall(“{call fenye(?,? ,?,? ,?,? )}”)。
//给?赋值
Cs.setString(1,"emp"); 表
Cs.setInt(2,5);每页大小
Cs.setInt(3,2);第2页
//接受总记录数
Cs.registerOutParemeter(4,oracle.jdbc.oracleTypes.integer)//运行
//注冊总页数
Cs.registerOutParemeter(5,oracle.jdbc.oracleTypes.integer)//运行
//注冊返回的结果集
Cs.registerOutParemeter(6,oracle.jdbc.oracleTypes.cursor)//运行
Cs.execute();
//取出总记录数,这里注意。getint(4)中4是由该參数的位置决定 Int rowNum=cs.getInt(4);
Int pageCount=cs.getint(5);
Resultset rs=(resultset)cs.getobject(6); //显示下是否正确
System.out.println("rownum="+ rownum);
System.out.println("总页数:")+pagecount);
While(rs.next()){ system.out.println("编号:"+rs.getInt(1) +“名字”+rs.getstring(20)+"薪水"。
}
} }
Catch(EXCEPTION E){
e.printstacktrace(); }
Finally{
关闭各个链接 } } }

看似非常复杂一个分页过程,通过一步步由简到繁的分解,由无返回值的存储过程,到有返回值,进而到以集合形式作为返回值的存储过程,加上简单的分页算法。基于pl/sql中包,游标。mod语句,if分支语句。变量的定义,oder by子句组成。

学习的过程就是这样,一口一个胖子是不可能的。相同这也是人类认知的一个规律,由简到繁,在遇到复杂的问题要考虑怎样将它拆分成简单的,自己熟知的问题。一步步了解。

Oracle基础(五)pl/sql进阶(分页过程)的更多相关文章

  1. Oracle数据库之PL/SQL基础

    介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...

  2. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  3. pl/sql进阶一控制结构

    在任何计算机语言(c,java,c#,c++)都有各种控制语句(条件语句,循环结构,顺序控制结构…),在pl/sql中也存在这样的控制结构. 在本部分学校完毕后,希望大家达到: 1)使用各种if语句 ...

  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  5. Oracle数据库之PL/SQL程序设计简介

    PL/SQL程序设计简介 一.什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写. ORACLE的SQL ...

  6. pl/sql进阶--例外处理

    在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception).通常例外情况的种类有三种: 1.预定义的oracle例外情况oracle预定义的例外情况大约有24个,对于这种 ...

  7. 64位Oracle 11g 使用PL/SQL

    Oracle 11g和PL/SQL安装完后,发现打开PL/SQL并不能连接Oracle数据库! [第一回合]完败! 先是在网上找解决方法,说是需要使用Net Configuration Assista ...

  8. oracle数据库之PL/SQL 块结构和组成元素

    一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...

  9. ORACLE中的PL/SQL

    一. 1.过程,函数,触发器是pl/sql编写.                2. 过程函数触发器是在Oracle中.                      3.pl/sql是非常强大的数据库过 ...

随机推荐

  1. adb 命令使用的时候出现Error

    在使用adb 命令行的时候会出现Error 重启adb server 即可,使用管理员运行Cmd 命令窗口 adb kill-server adb start-server 如果是连接真机查看的时候再 ...

  2. 【HTML】让<pre>标签文本自动换行

    利用<pre></pre>这个标签可以将其包起来的文字排版.格式,原封不动的呈现出来. 也就是说你输入的东西被原封不动的输出,包括你输入的空格之类的,不用 和<BR> ...

  3. boost.asio系列——io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  4. Windows 7如何建立一个FTP的快捷方式

    原来,使用Windows XP的时候,在IE6的地址栏里输入FTP服务器的地址,就可以打开一个资源管理器的界面来管理文件.但是,随着IE的版本的提升或是装了Windows 7,原来的这种方法就不能用了 ...

  5. hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵

    题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离. 只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了. 这里有个坑,比如: 1 ...

  6. Struts2 Action接收表单参数

    struts2 Action获取表单传值    1.通过属性驱动式    JSP:        <form action="sys/login.action" method ...

  7. (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GE ...

  8. HTTP 响应

    HTTP 响应 所谓响应事实上就是server对请求处理的结果.或者假设浏览器请求的直接就是一个静态资源的话,响应的就是这个资源本身. HTTP 响应的组成 ①响应状态行:包含协议版本号.响应状态码. ...

  9. flex网上办(苹果)桌面系统仿真

    1.有登录界面 2.能够载入app(每一个app是单独的swf),并可拖动app的图标互相叠加 3.桌面上显示的哪些APP与目录是依据登陆的用户信息.从webservice中读取的(名字.图标信息等) ...

  10. Struts2他们拦截器实例定义—登陆权限验证

    版本号:struts2.1.6 这种情况下实现功能:用户需要指定username登陆,进入相应的页面运行成功登陆作战,否则,它返回到着陆的登录页面,当直接进入操作页面(登陆访问页面后的能力)如果不同意 ...