oracle编写过程以及存储过程在java中的调用

1.无返回值的存储过程

创建书籍表    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 values(spBookId,spBookName,spPublishHouse);
end;

在JAVA中调用

//加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn=DriverManager.getConnection("jdbc,oracle.thin:@127.0.0.1:1521:ORCL","scott","tiger");

//创建CallableStatement

CallableStatement cs=conn.prepareCall("{call sp_pro7(?,?,?)}");

cs.setInt(1,10);

cs.setString(2,"高等数学");

cs.setString(3,"机械工业出版社");

//执行

cs.execute();

//关闭打开的资源

cs.close();

conn.close();


有输入和输出的存储过程(返回单个值),通过编号查出姓名

create or replace procedure sp_pro8(spno  in  number,spName out varchar2) is

begin

select   ename into spName from emp where empno=spno;

end;

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn=DriverManager.getConnection("jdbc.oracle.thin:@127.0.0.1:1521:ORCL","scott","tiger");

CallableStatement cs=conn.prepareCall("{call sp_pro8(?,?)}");

//给第一个问号赋值

cs.setInt(1,7788);

//给第二个问号赋值,相当于注册一个输出值,同时给予类型

cs.registerOutParameter(2,oracle.jdbc.OracleType.VARCHAR);

//执行

cs.execute();

//取出返回值,要注意问号的顺序

String name=cs.getString(2);

//关闭资源


如果返回多个值,直接加问号,原理与上面一致。




有返回值的存储过程(列表【结果集】)

编写一个存储过程,输入部门号,返回所有的雇员的信息

由于oracle存储过程没有返回值,它的所有返回值都是由out参数来代替的,列表同样也不例外。由于是结果集,不能用一般的参数,必须用package了.

所以分为两部分

1.创建一个包,在该包中定义了一个游标类型的游标test_cursor;

create or replace  package  testpackage  as

type  test_cursor  is ref cursor;

end package;

2.创建存储过程

create or replace  procedure sp_pro9(spNo in number,spName out varchar2, p_cursor  out   testpackage.test_cursor)  is

begin

open p_cursor for select * from emp where deptno=spNo;

end;


在Java中的调用

create or replace

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn=DriverManager.getConnection("jdbc.oracle.thin:@127.0.0.1:1521:ORCL","scott","tiger");

CalableStatement cs=conn.prepareCall(“{call  sp_pro9(?,?)}”);

cs.setInt(1,10);

cs.registerOutParameter(2,oracle.jdbc.OracleType.VARCHAR);

cs.registerOutParameter(2,oracle.jdbc.OracleType.CURSOR);

cs.execute();

//取出结果集

ResultSet rs=(ResultSet)cs.getObject(2);

while(rs.next){

System.out.oprintln(rs.getInt(1));

}

//关闭资源


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值