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

java调用带有返回值的oracle存储过程

2011-06-07 00:00 417 查看
项目开发中,需要利用存储过程来返回处理的结果,虽然sql语句熟悉,但是写oracle存储过程还是头一回,现在分享出来。

首先在PL/SQL中建立一个存储过程,

create or replace procedure DIRECTNAME(planId in number,directnamestr out varchar2) is

-- in 表示的是输入的参数,out表示的是存储过程输出的参数
namestr varchar2(200);

CURSOR CUR -- 游标的声明
is
select p.pronam from com_project p
where p.projid = planid;
e CUR%ROWTYPE; --将游标的一行的数据赋给 e
begin
if not CUR %isopen then
open CUR; --游标开启
end if;
fetch CUR into e;
while CUR%found loop
namestr := namestr || e.pronam || ','; -- oracle的字符串连接使用的是 ||,开始我一直使用 + 号报错

fetch CUR into e;
end loop;
close CUR; -- 关闭游标
directnamestr := namestr;
end DIRECTNAME;

可以在PL/SQL Developer中测试,开启SQL窗口:

declare
strn varchar2(20);
begin
directname(8,strn);
dbms_output.put_line(strn);
end;

以下是hibernate的调用:

Connection conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
CallableStatement stmt = conn.prepareCall("{call directname(?,?)}");
stmt.setInt(1, 8);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
String result = stmt.getString(2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息