java調用帶有返回值的oracle存儲過程

  項目開發中,須要利用存儲過程來返回處理的結果,雖然sql語句熟悉,可是寫oracle存儲過程仍是頭一回,如今分享出來。sql

  首先在PL/SQL中創建一個存儲過程,oracle

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

      -- 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;     
fetch

  能夠在PL/SQL Developer中測試,開啓SQL窗口:spa

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

  如下是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);
字符串

相關文章
相關標籤/搜索