Java呼び出しストアド・プロシージャ、関数

10818 ワード

一、Java呼び出しストレージOracleストレージプロセス
テスト用テーブル:
--     

create table USERINFO

(

  username VARCHAR2(50) not null,

  password VARCHAR2(50) not null,

  email    VARCHAR2(50) not null

)

 
1.入力パラメータを呼び出すストアド・プロシージャ、戻り値なし
--      

create or replace procedure pro_userinfo_insert(username VARCHAR2,password VARCHAR2,email VARCHAR2) is

begin

  INSERT INTO userinfo VALUES(username,password,email);

  COMMIT;

end pro_userinfo_insert;

よびだし
//  jdbc    



//      

CallableStatement call = con.prepareCall("{call pro_userinfo_insert(?,?,?)}");

//    

call.setString(1, "wangwu");

call.setString(2, "123123");

call.setString(3, "[email protected]");

//

int result = call.executeUpdate();

//        

System.err.println(result);

 
2、出力パラメータ付きストレージプロセスを呼び出し、単一の値を返す
--         

create or replace procedure pro_userinfo_SelectCount(

  v_count OUT INT

)is

begin

  SELECT COUNT(*) INTO v_count FROM Userinfo;

end pro_userinfo_SelectCount;

コールコード
//      

CallableStatement call = con.prepareCall("{call pro_userinfo_selectcount(?)}");

//    

call.registerOutParameter(1, Types.INTEGER);

call.execute();

System.out.println(call.getInt(1));

 
なお、ここでのproc.getInt(1)の数値1は任意ではなく、記憶中のout列に対応しており、outが2番目の位置であればproc.getInt(2)であり、3番目の位置であればproc.getInt(3)であり、もちろん複数の戻り値を同時に持つこともでき、それはいくつかのoutパラメータを追加することである.
  
3、リストに戻るストレージプロセス
Oracleストレージ・プロシージャには戻り値がないため、そのすべての戻り値はoutパラメータで置き換えられ、リストも例外ではありませんが、集合であるため、一般的なパラメータは使用できません.pagkageを使用する必要があります.そのため、2つの部分に分けます.
カーソル・タイプの作成:
--

create or replace package shop_package IS

  --        

  TYPE ref_cursor IS REF CURSOR;

end shop_package;

カーソルのあるストアド・プロシージャを作成するには、次の手順に従います.
--

create or replace procedure pro_userinfo_select(cur OUT shop_package.ref_cursor) is

begin

    --         sql  

    OPEN cur FOR SELECT * FROM userinfo;

end pro_userinfo_select;

Java呼び出しコード
//      

CallableStatement call = con.prepareCall("{call pro_userinfo_select(?)}");

//             

call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

call.execute();

//

ResultSet rs = (ResultSet) call.getObject(1);

System.out.println("  \t\t  ");

while(rs.next()){

    System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));

}

 
二、Java呼び出し関数
1、関数を呼び出し、単一の値を返す
--        Email  ,       

create or replace function fun_userinfo_selectEmail(v_username varchar2) 

  return varchar2 

is

  v_email VARCHAR2(50);

begin

  SELECT email INTO v_email FROM Userinfo WHERE username=v_username;

  return(v_email);

end fun_userinfo_selectEmail;

Java呼び出し
//    

CallableStatement call = con.prepareCall("{?=call fun_userinfo_selectemail(?)}");  //      {},     !

//    ,1      ,2          

call.registerOutParameter(1, Types.VARCHAR);

call.setString(2, "zhangsan");

call.execute();

System.out.println(call.getString(1));

 
2、カーソルを返す関数を呼び出す
--

create or replace function fun_userinfo_select return shop_package.ref_cursor is

   ref_cur shop_package.ref_cursor;

begin

  OPEN ref_cur FOR SELECT * FROM userinfo;

  return(ref_cur);

end fun_userinfo_select;

Java呼び出し
//    

CallableStatement call = con.prepareCall("{?=call fun_userinfo_select()}");

//          

call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

call.execute();



ResultSet rs = (ResultSet) call.getObject(1);

System.out.println("  \t\t  ");

while(rs.next()){

    System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));

}