pl/sql编程2-综合
案例1,要求:可以向book表添加书,并通过Java程序调用该过程1.1 创建表
create table book(bookId number,bookName varchar2(20),publishHosuse varchar2(20));
1.2 编写过程,无返回值
create or replace procedure test_pro9(tbookId number,tbookName varchar2,tpublishHouse varchar2) is
begin
insert into book values(tbookId,tbookName,tpublishHouse);
end;
在Java中调用
package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro9(?,?,?)}");
//4.给问号赋值
cs.setInt(1,1);
cs.setString(2,"笑傲江湖");
cs.setString(3,"人民出版社");
//5.执行
cs.execute();
//6.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.3创建存储过程,有返回值
--in 表示输入,默认就是in,out是输出
create or replace procedure test_pro10(tId in number,tname out varchar2) is
begin
select bookName into tname from book where bookId=tId;
end;
在Java中调用
package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro10(?,?)}");
//4.给问号赋值
cs.setInt(1,1);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
//5.执行
cs.execute();
String bookname=cs.getString(2);
System.out.println("1号书的名字是:"+bookname);
//6.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.4创建存储过程,有返回值,并且是个结果集
--建立一个包
create or replace package test_pck2 as
type test_cursor is ref cursor;
end test_pck2; --建立一个存储过程
create procedure test_pro11(tNo in number,t_cursor out test_pck2.test_cursor) is
begin
open t_cursor for select * from myemp where deptno=tNo;
end;
在Java中调用
package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro11(?,?)}");
//4.给问号赋值
cs.setInt(1,10);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
//5.执行
cs.execute();
//6.得到结果集
ResultSet rs=(ResultSet)cs.getObject(2);
while(rs.next()){
System.out.println(rs.getInt(1)+" "+rs.getString(1));
}
//7.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
案列2,编写分页的过程
要求:输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回结果集
--要求:输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回结果集
--创建一个包,定义一个游标
create or replace package test_pck2 as
type test_cursor is ref cursor;
end test_pck2; create or replace procedure test_pro12
(tableName in varchar2, --表名
pageCount in number, --每页记录数
pageNow in number, --当前页
allRows out number, --总记录数
allPages out number, --总页数
p_cursor out test_pck2.test_cursor --返回的结果集
) is
--定义部分
--定义两个整数
v_begin number:=(pageNow-1)*pageCount+1;
v_end number:=pageNow*pageCount;
--定义SQL语句,字符串
v_sql varchar2(1000);
begin
v_sql:='select * from (select a1.*,rownum rn from (select * from '||tableName||') a1 where rownum<='||v_end||') where rn>'||v_begin;
--把游标和SQL关联起来
open p_cursor for v_sql;
--计算allRows
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into allrows;
--计算allPages,注意取模的函数的写法
if mod(allRows,pageCount)=0 then
allPages:=allRows/pageCount;
else
allPages:=allRows/pageCount+1;
end if;
--关闭游标
--close p_cursor;
end;
使用Java测试
package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro12(?,?,?,?,?,?)}");
//4.给问号赋值
cs.setString(1,"emp");
cs.setInt(2,5);
cs.setInt(3,1);
//注册总记录数
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册总页数
cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
//注册返回的结果集
cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);
//5.执行
cs.execute();
//取出总记录数
int rowNum=cs.getInt(4);
//取出总页数
int allCount=cs.getInt(5);
ResultSet rs=(ResultSet)cs.getObject(6);
//取出结果
System.out.println("总记录数: "+rowNum);
System.out.println("总页数: "+allCount);
while(rs.next()){
System.out.println("编号:"+rs.getInt(1)+"名字: "+rs.getString(2)); //注意这里的数字1,2分表代表表中的1,2列
}
//7.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
pl/sql编程2-综合的更多相关文章
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- Oracle数据库编程:PL/SQL编程基础
2.PL/SQL编程基础: PL/SQL块: declare 定义部分 begin 执行部分 exception 异 ...
- pl/sql编程
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
随机推荐
- mybatis中如果存在参数不再实体中的是如何处理
<select id="queryMapByType" parameterType="int" resultType="my.geomap.VO ...
- linux查找系统中占用磁盘空间最大的文件
Q:下午有一客户磁盘空间占用很大,使用df查看磁盘剩余空间很小了,客户想知道是哪些文件占满了文件. Q1:在Linux下如何查看系统占用磁盘空间最大的文件? Q2:在Linux下如何让文件夹下的文件让 ...
- 风雪之隅(Laruence PHP开发组成员, Zend兼职顾问, Yaf, Yar, Yac, Opcache等项目作者、维护者.)
http://www.laruence.com/?from=inf&wvr=5&loc=infblog
- swiper中有视频时,滑动停止后视频停止播放
我们经常能够看到在图片轮播中,穿插着视频的播放,如下图为淘宝的一个产品轮播图,放个视频能够让顾客对产品有个更全面的认识. 我们可以用swiper实现这个功能.用法就跟放图片一样,只是这里把图片换成视频 ...
- Spring 4 官方文档学习(十一)Web MVC 框架之locales
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-localeresolve ...
- Spring 4 官方文档学习(七)核心技术之Spring AOP APIs
请忽略本篇内容!!! 1.介绍 2.Spring中的pointcut API 2.1.概念 2.2.对pointcut的操作 2.3. AspectJ expression pointcut 2.4. ...
- vector、map删除当前记录
map<string, string> sMap; map<string, string>::iterator iter; for(iter = sMap.begin();it ...
- 防止 apk反编译 jocky-- java混淆代码 (转至:http://my.oschina.net/f839903061/blog/72554)
1.下载jocky,解压后把整个文件夹复制到Eclipse的plugin目录.2.重启Eclipse,在项目上点右键,如果出现jocky菜单,则安装成功. 3.在项目上点右键,选菜单jocky-> ...
- 学习:List的扁平化 和 拼接
一.list_to_binary/1的参数:iolist类型的. 二.lists:concat(Things) -> string() Types: Things = [Thing] Thing ...
- perl 脚本将phred33 转换为phred64
今天用fastx_tookit 时遇到问题, 我的fastq 文件的碱基质量值格式为phred33, 而fastq_tookit 默认碱基质量值的格式为phred64, 所以报错了,提示我的fastq ...