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

旧街凉风 提交于 2020-04-11 16:39:06

  项目开发中,需要利用存储过程来返回处理的结果,虽然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);

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!