java主程序怎样调用子程序_Java 开发中之八:oracle中的子程序之在JAVA中如何调用程序包...

--程序包:解决集合数据的获取

--引用类型游标+函数/存储过程:

--包的创建(包的声明+实现)

create or replace package mypack

as

--类似于编写接口

--创建引用型的游标(制作返回值类型,只在这个包里有效)

type myttt is ref cursor return emp%rowtype ;--如果有返回值则是强类型

--首先写函数,其实考虑存储过程

function f2 (dno number) return myttt;--返回一个游标,这样返回的就不是一个单值了。

end mypack ;

--程序包:解决集合数据的获取

create or replace package body mypack --包体相关于接口的实现

as

function f2 (dno number) return myttt

is --因为上面有as了,所以这里写is

ttt myttt;

begin

open ttt for select * from emp where emp.deptno=dno; --只有给游标时才没有Into,其它都给写上into

return ttt;

end;

end;

用pl/sql块接这个游标

declare

eee mypack.myttt;

empr emp%rowtype;

begin

eee:=scott.mypack.f2(30);

loop

fetch eee into empr;

exit when eee%notfound;

dbms_output.put_line(empr.ename);

end loop;

end;

JAVA中调这个包体

Connection connection=null;

CallableStatement statement=null;

OracleConnection conn=null;

try

{

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

//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");

String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";

String user="scott";

String password="tiger";

//下面是標準的的連接對象

//connection= DriverManager.getConnection(url, user, password);

//下面是在標準的連接不上時可以考慮的

conn=(OracleConnection) DriverManager.getConnection(url, user, password);

String strsql="{?=call mypack.f2(?)}";

statement= conn.prepareCall(strsql);

statement.setInt(2, 20);

statement.registerOutParameter(1,OracleTypes.CURSOR);

statement.execute();

ResultSet rSet= (ResultSet) statement.getObject(1);

while(rSet.next()){

System.out.println(rSet.getInt(1)+","+rSet.getString(2));

}

}

catch (ClassNotFoundException e)

{

e.printStackTrace();

}

finally

{

if(conn!=null)

{

conn.close();

}

if(connection!=null){

connection.close();

}

if(statement!=null){

statement.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值