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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- lightdb新特性--相容oracle儲存過程的聯合陣列Oracle儲存過程陣列
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- 呼叫儲存過程儲存過程
- oracle的儲存過程Oracle儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- Oracle儲存過程Oracle儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- Oracle儲存過程-1Oracle儲存過程
- jsp中呼叫儲存過程JS儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- Oracle儲存過程中定義多個遊標Oracle儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- JAVA儲存過程(轉)Java儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- LightDB/PostgreSQL 相容Oracle儲存過程SQLOracle儲存過程
- Oracle儲存過程中呼叫DBLink同義詞出現錯誤:PLS-00201: 必須宣告識別符號Oracle儲存過程符號
- MySQL儲存過程語句及呼叫MySql儲存過程
- mysql 儲存過程中變數的定義與賦值操作MySql儲存過程變數賦值
- jdbc使用call呼叫儲存過程報錯JDBC儲存過程
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- 儲存raid5陣列兩塊盤掉線的解決過程AI陣列
- MySQL儲存過程的許可權問題MySql儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- IBM X3650M3儲存raid陣列癱瘓的恢復過程IBMAI陣列
- MySQL中陣列的儲存MySql陣列
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- java使用mybatis 呼叫儲存過程返回一個遊標結果集JavaMyBatis儲存過程