java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
oracle中procedure是不能有返回值的,要想返回值,就得有輸出參數,同樣要想返回記錄集,可以把游標類型作為輸出參數。
下面是詳細情況說明:
?
一:無返回值的存儲過程調用
存儲過程:
create? or replace Procedure PRO_1(PARA1?in VARCHAR2,PARA2 in VARCHAR2)???as????
begin
??? insert into? EMP(ID,NAME)?values (PARA1, PARA2);???
end PRO_1;???
java程序調用:(和下面類同)
?
?
二:有返回值的存儲過程調用(非結果集)
存儲過程:
create? or replace Procedure PRO_2(PARA1?in VARCHAR2,PARA2 OUT VARCHAR2)???as???
bigin??
??? select NAME into PARA2?from EMP?where ID= PARA1;????
end?PRO_2;???
java程序調用:
?
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
??????? Connection conn = DriverManager.getConnection(
??????????? "jdbc:oracle:thin:@202.96.28.250:1521:he", "username", "password");
??????? CallableStatement st = conn.prepareCall("{call PRO_2(?,?)}");
  ? st.setString(1,"1");
??????? st.registerOutParameter(2,OracleTypes.VARCHAR);
??????? st.execute();
??????? String name = st.getString(2);//2與上面存儲過程的out參數位置對應,也可以同時有多個返回值,那就是 ??????? 再多加幾個out參數了
??????? System.out.println(r.getString("title"));
?
三:有返回值的存儲過程調用(返回結果集)
存儲過程:
create or replace procedure Test(p_cur in out sys_refcursor) 
as
begin 
open p_cur for select * from BOOK;
end;
java程序調用:
try {
??????? DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
??????? Connection conn = DriverManager.getConnection(
??????????? "jdbc:oracle:thin:@202.96.28.250:1521:he", "username", "password");
??????? CallableStatement st = conn.prepareCall(
??????????? "{call Test(?)}");
??????? st.registerOutParameter(1,OracleTypes.CURSOR);
??????? st.execute();
??????? ResultSet r = (ResultSet) st.getObject(1);
??????? while (r.next()) {
??????????? System.out.println(r.getString("title"));
??????? }
??}
??catch(Exception e) {
}
轉載于:https://www.cnblogs.com/xh6210/archive/2012/07/04/2576545.html
總結
以上是生活随笔為你收集整理的java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 3.2.2.5 BRE运算符优先级
- 下一篇: oc之Mac-响应链(Responder
