您的位置:首页 > 数据库 > Oracle

Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】

2010-08-08 23:09 761 查看
通过JAVA
调用
ORACLE
的存储过程,在
ORACLE
的存储过程内部做了一个查询在
JAVA
中获取该查询结果,这个和
SYBASE

SQLSERVER
的获取不一样,等我的下一篇文章我会介绍如何获取
SYBASE

SQLSERVER
在存储过程中执行了查询后如何获取其结果及存储过程的编写。

在Oracle
中需要返回查询结果集,必须将其以游标的形式返回,但游标又不是基础类型,因而不能够像返回字符类型一样直接可以返回,如我们定义一般的存储过程如下:

CREATE

OR

REPLACE

PROCEDURE
simpleProc

(

outpara
OUT

VARCHAR2

)

AS

BEGIN

outpara:=
'简单过程'
;

return
;

END
;

定义返回结果集的存储过程,
不能够
定义成如下方式:

procedure
testQuery

(

return_rs
out

CURSOR

--CURSOR只是一个关键字,但并不是一种类型,所以在存储过程中这样写会报"CURSOR类型打不到"的错误

)

as

begin

--......

end
;

我们需要将过程定义到包中,在包里面先定义游标引用,然后才能够在过程的输出参数中引用该类型,如下:

CREATE

OR

REPLACE

PACKAGE
TestQueryPkg

IS

--定义游标引用,后面就可以在输出参数中定义为该类型输出

TYPE
cur_rs
IS

ref

CURSOR
;

PROCEDURE
testQuery(return_rs
OUT
cur_rs);

END
;

CREATE

OR

REPLACE

PACKAGE

BODY
TestQueryPkg

IS

procedure
testQuery

(

return_rs
out
cur_rs

)

as

begin

open
return_rs
for

select
username
from
pcmc_user;

return
;

end
;

END
;

获取输出结果的JAVA
代码如下方法:

/**

*

执行ORACLE存储过程,获取在过程中输出的查询结果集

*

*/

public

static

void

doTestQuery
(){

Function function=
new
Function();

//
换成你自己的Connection

Connection conn=function.getConnection();

CallableStatement cs =
null
;

StringBuffer procStr =
new
StringBuffer(
""
);

procStr.append(
"{call TestQueryPkg.testQuery(?)}"
);

try
{

cs = conn.prepareCall(procStr.toString());

cs.registerOutParameter(1, oracle.jdbc.OracleTypes.
CURSOR
);

cs.execute();

//将获得的输出转换为结果集

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

while
(rs.next()){

System.
out
.println(rs.getString(1));

}

rs.close();

cs.close();

}
catch
(Exception e){

e.printStackTrace();

}
finally
{

try
{

conn.close();

}
catch
(SQLException e) {

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

}

以上代码经过调试通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: