java呼叫oracle儲存過程的自定義型別(可變陣列)
java呼叫oracle儲存過程的自定義型別(可變陣列)。2010-05-14 10:06
在使用儲存過程中,我們有時需要傳遞可變陣列,存在兩種情況,儲存過程有輸入或輸出引數為自定義可變陣列的。在java程式碼中,如何正確呼叫oracle儲存過程的自定義可變陣列型別,在這裡做一下示例說明.
java呼叫oracle儲存過程的自定義型別:
plsql定義字串和數值型可變陣列:
一。定義全域性型別:
CREATE OR REPLACE TYPE USERSEQID_ARRAY IS VARRAY(50000) OF NUMBER(9)
CREATE OR REPLACE TYPE USERNAME_ARRAY AS VARRAY(32) of varchar(32)
CREATE OR REPLACE TYPE USERPWD_ARRAY AS VARRAY(50000) of varchar(60)
二。java呼叫輸出引數為自定義陣列的儲存過程:
2.1 輸出引數為自定義陣列的儲存過程make_logincard_pro:
procedure make_logincard_pro (
p_cardsuitcode in
varchar,
p_userseqidArr out USERSEQID_ARRAY ,
p_usernameArr out
USERNAME_ARRAY
)
IS
v_addedtime date:= sysdate;
BEGIN
FOR ii IN 1 .. 10 LOOP
IF p_userseqidArr IS NULL THEN
p_userseqidArr :=
USERSEQID_ARRAY(ii);
ELSE
p_userseqidArr.EXTEND;
--超過陣列定義大小(50000)將丟擲異常
p_userseqidArr(ii) :=
ii;
END IF;
IF p_usernameArr IS NULL THEN
p_usernameArr :=
USERSEQID_ARRAY(ii || 'TT');
ELSE
p_usernameArr.EXTEND; --超過陣列定義大小(32)將丟擲異常
p_usernameArr(ii)
:= ii || 'TT';
END IF;
END LOOP
END make_logincard_pro ; 2.2JAVA呼叫儲存過程make_logincard_pro:
//程式碼片段
Connection con =
session.connection();
java.sql.CallableStatement cst = con
prepareCall("call CNBT.test_pro(?,?,?)");
cst.setString(1,
cardSuitCode);
cst.registerOutParameter(2,
OracleTypes.ARRAY,"USERSEQID_ARRAY");
cst.registerOutParameter(3,
OracleTypes.ARRAY,"USERNAME_ARRAY");
java.sql.Array userSeqIdArr = cst.getArray(2);
java.sql.Array userNameArr
= cst.getArray(3);
if ( userSeqIdArr != null ) ...{
BigDecimal userSeqIdList[] =
(BigDecimal[])userSeqIdArr.getArray();//資料庫的number對映為BigDecimal
//。。。。。。
}
if ( userNameArr != null ) ...{
String userNameList[] =
(String[])userNameArr.getArray();
//。。。。。。
}
--------------------------------------------------------------------------------
三. java呼叫輸入引數為自定義陣列的儲存過程:
3.1 輸入引數為自定義陣列的儲存過程update_logincard_pwd:
/**//**********************************************
*
update_logincard_pwd *
*功能描述:更新密碼儲存過程 *
*輸入引數: *
*輸出引數: *
*作者:hanjiong *
***********************************************/
procedure
update_logincard_pwd (
p_userSeqIdList in USERSEQID_ARRAY,
p_userPwdList in USERPWD_ARRAY,
p_resultcode out number
);3.2
java呼叫儲存過程update_logincard_pwd:
//程式碼片段
..........................
Connection con =
session.connection();//使用的weblogic資料來源
oracle.jdbc.OracleCallableStatement
cst2 =
(oracle.jdbc.OracleCallableStatement)con
.prepareCall(
"call
CNBT.update_logincard_pwd(?,?,?)");
weblogic.jdbc.wrapper.Connection weblogicConn =
(weblogic.jdbc.wrapper.Connection)con;
oracle.jdbc.OracleConnection oracleConn =
(oracle.jdbc.OracleConnection)weblogicConn.getVendorConnection();//轉化connection
oracle.sql.ArrayDescriptor des_USERSEQID_ARRAY
=
oracle.sql.ArrayDescriptor.createDescriptor("USERSEQID_ARRAY",oracleConn);
oracle.sql.ArrayDescriptor des_USERPWD_ARRAY
=
oracle.sql.ArrayDescriptor.createDescriptor("USERPWD_ARRAY",oracleConn);
oracle.sql.ARRAY ora_array1 = new oracle.sql.ARRAY(des_USERSEQID_ARRAY,
oracleConn, userAccSeqIdArr);
oracle.sql.ARRAY
ora_array2 = new oracle.sql.ARRAY(des_USERPWD_ARRAY, oracleConn,
userPwdList);
cst2.setArray(1,
ora_array1);
cst2.setArray(2,
ora_array2);
cst2.registerOutParameter(3,
java.sql.Types.INTEGER);
cst2.execute();
updateCode = cst2.getInt(3);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29063131/viewspace-1133822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- 用java呼叫oracle儲存過程JavaOracle儲存過程
- Java呼叫Oracle儲存過程的問題JavaOracle儲存過程
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- 用java呼叫oracle儲存過程總結JavaOracle儲存過程
- java中呼叫儲存過程Java儲存過程
- C#呼叫 oracle儲存過程C#Oracle儲存過程
- C#呼叫Oracle儲存過程C#Oracle儲存過程
- 呼叫儲存過程儲存過程
- oracle goldengate 呼叫儲存過程案例OracleGo儲存過程
- Jsp中呼叫Oracle儲存過程JSOracle儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- lightdb新特性--相容oracle儲存過程的聯合陣列Oracle儲存過程陣列
- Redis序列化儲存Java集合List等自定義型別RedisJava型別
- Java呼叫SQL Server的儲存過程詳解JavaSQLServer儲存過程
- Winform呼叫儲存過程ORM儲存過程
- perl呼叫儲存過程儲存過程
- jdbc呼叫儲存過程JDBC儲存過程
- Hibernate呼叫oracle儲存過程的問題Oracle儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 自定義效能統計儲存過程包runstats儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程輸入引數型別定義引起的問題儲存過程型別
- vb呼叫儲存過程的方法儲存過程
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- 儲存過程語法與Java程式的呼叫方式儲存過程Java
- java儲存過程呼叫servlet的授權問題Java儲存過程Servlet
- (9)mysql 中的儲存過程和自定義函式MySql儲存過程函式
- mysql如何呼叫儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- PB中呼叫儲存過程儲存過程
- php呼叫mssql儲存過程PHPSQL儲存過程
- Java呼叫儲存過程(帶輸出引數)Java儲存過程
- oracle的儲存過程Oracle儲存過程
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程