项目开发中,需要利用存储过程来返回处理的结果,虽然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);
来源:oschina
链接:https://my.oschina.net/u/140722/blog/23586