程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Java調用Oracle的存儲過程

Java調用Oracle的存儲過程

編輯:Oracle數據庫基礎
前言    
      在有些應用中,當碰到一個比較復雜的業務處理時,單純靠程序中執行sql語句無法完成或非常的麻煩,於是,我們可以把業務邏輯寫到存儲過程中,以簡化程序處理。本文介紹一些Java程序如何調用Oracle的過程。 1、程序代碼:    
    Connection con = null;
    CallableStatement proc = null;
    con = connectionPool.getConnection();
    proc = con.prepareCall("{ call set_death_age(?,?) }");
在Oracle中procedure是沒有返回值的,這種方式調用的是procedure,如果需要調用function時,則可以用:
    proc = con.prepareCall("{ ?=call set_death_age(?) }");
?=call set_death_age(?)的第一個?就是function的返回值。
當然,我們還必須為向proc注冊出參和入參:
    Connection con = null;
    CallableStatement proc = null;
    con = connectionPool.getConnection();
    proc = con.prepareCall("{ call set_death_age(?,?) }");
    proc.registerOutParameter(1, Types.INTEGER);
    proc.setString(2, "name");
    proc.execute();
2、在Oracle中
  我們以執行過程為例,以下是過程的源碼:
    create  or replace procedure set_death_age(v_name in varchar2,v_age out number )
    is
    begin
     select id into v_age from users where name = v_name;
    return v_age;
    end;
3、返回值為結果集
     當返回的是一個結果集時。在過程中需要返回的類型是游標,oracle中為oracle.jdbc.OracleTypes.CURSOR類型,用stmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);返回的是ResultSet類型
     CallableStatement toesUp = connection.prepareCall("{  call PK_AREA_PUBLIC.area_search(?,?,?) }");
     toesUp.registerOutParameter(1, Types.VARCHAR);
     toesUp.registerOutParameter(2, Types.INTEGER);
     toesUp.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
     toesUp.execute();
     int age = toesUp.getInt(2);
     ResultSet rs = (ResultSet) toesUp.getObject(3);
在過程中
    create  or replace package PK_AREA_PUBLIC is
    TYPE serarch_result IS REF CURSOR;
    PROCEDURE area_search(v_area_id varchar2 ,cur_result_out OUT serarch_result) ;
    end PK_AREA_PUBLIC;
    create  or replace package body PK_AREA_PUBLIC is
    PROCEDURE area_search(v_area_id varchar2 ,cur_result_out OUT serarch_result)
    IS
    sqlstr VARCHAR2(1000);
    BEGIN
    sqlstr:='select * from code_area where area_id=:1 ';
    OPEN cur_result_out FOR sqlstr using v_area_id ;
    END area_search;
    end PK_AREA_PUBLIC;
4、如果一個參數作為inout時    
    CallableStatement toesUp = connection.prepareCall("{ call list_early_deaths (?) }");
    toesUp.setInt(20);
    toesUp.registerOutParameter(1, Types.Ingter);
    toesUp.execute();
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved