编写分页过程
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进阶(分页过程)的更多相关文章
-
Oracle数据库之PL/SQL基础
介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...
-
Oracle数据库之PL/SQL过程与函数
Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...
-
pl/sql进阶一控制结构
在任何计算机语言(c,java,c#,c++)都有各种控制语句(条件语句,循环结构,顺序控制结构…),在pl/sql中也存在这样的控制结构. 在本部分学校完毕后,希望大家达到: 1)使用各种if语句 ...
-
每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
-
Oracle数据库之PL/SQL程序设计简介
PL/SQL程序设计简介 一.什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写. ORACLE的SQL ...
-
pl/sql进阶--例外处理
在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception).通常例外情况的种类有三种: 1.预定义的oracle例外情况oracle预定义的例外情况大约有24个,对于这种 ...
-
64位Oracle 11g 使用PL/SQL
Oracle 11g和PL/SQL安装完后,发现打开PL/SQL并不能连接Oracle数据库! [第一回合]完败! 先是在网上找解决方法,说是需要使用Net Configuration Assista ...
-
oracle数据库之PL/SQL 块结构和组成元素
一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...
-
ORACLE中的PL/SQL
一. 1.过程,函数,触发器是pl/sql编写. 2. 过程函数触发器是在Oracle中. 3.pl/sql是非常强大的数据库过 ...
随机推荐
-
知方可补不足~sqlserver中的几把锁~续
回到目录 之前写过相关的文章,对脏读,不可重复读,幻读都做了相当的研究,而今天在程序中又出现了这个问题,即当一条数据被update时,另一个线程同时发起了读的操作,这对于序列化级别的事务是不被允许的, ...
-
6/8/9/10/11 Sprint2 看板和燃尽图
端午放假,大家都回家了 页面模块的大体设计,因所找的资料不全,还待改善
-
[游戏模版5] Win32 折线 弧线
>_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance ...
-
Hibernate逍遥游记-第13章 映射实体关联关系-006双向多对多(分解为一对多)
1. 2. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...
-
从经典问题来看 Copy 方法(转)
来自:Gua | 瓜地 链接:https://desgard.com/copy/ 在初学 iOS 的时候,可能会被灌输这么一个常识,切记 NSString 的 property 的修饰变量要写作 c ...
-
Visual Studio 2012的新技术特性
前言 我更换了VS2012开发工具,那么它有什么特性呢? [caption id="attachment_1235" align="alignnone" wid ...
-
Laravel中间件
先谈一谈中间件的使用场景,比如路由转到一张页面,我们需要记录用户的cookie,或者检测用户的访问权限,这些操作如果全写在控制器里是不合适的,因为随着业务的扩充,控制器里的业务逻辑会越来越臃肿,难以维 ...
-
【转】jquery-easyui中datagrid的单击删除此行
最近在easyui的项目开发,easyui封装了许多方法,用起来很方便,但同时也遇到了不少的问题. 如果在datagrid中直接将index传给easyui自带的deletRow方法来删除当前点击行, ...
-
扩展运算符(spread)是三个点(…)
扩展运算符(spread)是三个点(…),将一个数组||类数组||字符串转为用逗号分隔的序列. js中用来对数组进行操作,把数组里面的东西统统拿出来 一.展开数组 //展开数组 let a = [1, ...
-
Executors相关的类(线程池)
一.概述 Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池.在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在 ...