Java呼び出しストアド・プロシージャ、関数
10818 ワード
一、Java呼び出しストレージOracleストレージプロセス
テスト用テーブル:
1.入力パラメータを呼び出すストアド・プロシージャ、戻り値なし
よびだし
2、出力パラメータ付きストレージプロセスを呼び出し、単一の値を返す
コールコード
なお、ここでのproc.getInt(1)の数値1は任意ではなく、記憶中のout列に対応しており、outが2番目の位置であればproc.getInt(2)であり、3番目の位置であればproc.getInt(3)であり、もちろん複数の戻り値を同時に持つこともでき、それはいくつかのoutパラメータを追加することである.
3、リストに戻るストレージプロセス
Oracleストレージ・プロシージャには戻り値がないため、そのすべての戻り値はoutパラメータで置き換えられ、リストも例外ではありませんが、集合であるため、一般的なパラメータは使用できません.pagkageを使用する必要があります.そのため、2つの部分に分けます.
カーソル・タイプの作成:
カーソルのあるストアド・プロシージャを作成するには、次の手順に従います.
Java呼び出しコード
二、Java呼び出し関数
1、関数を呼び出し、単一の値を返す
Java呼び出し
2、カーソルを返す関数を呼び出す
Java呼び出し
テスト用テーブル:
--
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));
}