項目開發中,須要利用存儲過程來返回處理的結果,雖然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);字符串