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

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

转载于:https://my.oschina.net/u/140722/blog/23586

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值