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编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
随机推荐
- 百度编辑器UEditor不能插入音频视频的解决方法
引用:https://my.oschina.net/u/379795/blog/787985 xssFilter导致插入视频异常,编辑器在切换源码的过程中过滤掉img的_url属性(用来存储视频url ...
- ecshop和ucenter的整合
按照网上的教材,一直提示数据库.密码错误,开始怀疑代码错了,毕竟都是两个老古董. 于是开始调试,居然调试也不能很好的支持,点击下一步后就卡死了,好吧,只好用log大法了, error_log(prin ...
- zookeeper原生API做java客户端
简介 本文是使用apache提供的原生api做zookeeper客户端 jar包 zookeeper-3.4.5.jar Demo package bjsxt.zookeeper.base; im ...
- 获取本地IP和mac等信息
1获取mac protected string getHostMacName() { string mac = ""; ManagementClass mc; mc = new M ...
- at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
关于手动编译hadoop入门例子WordCount并执行 之前做的例子都是用hadoop中已经编译好jar包来运行示例的但是这次想要手动编译个实例,练下手没想到还是遇到点了小困难 [root@cent ...
- Redis Key 过期策略
redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是vo ...
- 百度地图Api进阶教程-基础地图示例1.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- day day up
复位与时钟控制器 RCC(Reset Clock Controller) 通用输入输出 GPIO(General Purpose Input/Output) 嵌套向量中断控制器 NVIC(Nested ...
- EasyUi---searchbox 条件查询
前台UI参考代码: <script type="text/javascript" charset="utf-8"> $(function(){ /* ...
- css的id选择器与thinkphp结合
<head> <style type="text/css"> #a2{ border:1px solid blue; width:140px; height ...