有一個 Stored Procedure 為 SP_COUNT_WHICH 其輸入參數有字串及陣列,下面的範例就是可以讓使用者將陣列資料利用 Java Code 傳入到該 Stored Procedure。
範例 Code:
Connection conn;
CallableStatement cstmt = null;
String dbUrl ="jdbc:oracle:thin:@10.1.1.1:1530:TEST";
String user ="test";
String pw = "test";
float resultValue = 0.0f;
// 帶入 Stored Procedure 的陣列
String[] selectItemCode = new String[]{"111111","222222"};
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(dbUrl, user, pw);
// 描述 StoreProcedure Array_Table
ArrayDescriptor des = ArrayDescriptor.createDescriptor("TEST.ARRAY_TABLE",conn);
ARRAY array_to_pass = new ARRAY(des,conn,selectItemCode);
// 裡面填入要使用的 SP
cstmt = conn.prepareCall("call SP_COUNT_WHICH(?,?,?)");
// 接下來傳入參數值
cstmt.setString(1, selectCode);
cstmt.setArray(2, array_to_pass);
cstmt.registerOutParameter(3, java.sql.Types.FLOAT);
cstmt.execute();
// 該 Stored Procedure 輸出值為 Float 格式
resultValue = cstmt.getFloat(3);
}catch(Exception ex){
ex.printStackTrace();
}finally{ …..
注意的是,該Stored Procedure 在建置時,須建立一個該輸入陣列對照的資料,如下:
字串型態的陣列
CREATE TYPE ARRAY_TABLE AS TABLE OF VARCHAR2 (50); -- Array of String
如是數字格式的陣列
CREATE TYPE ARRAY_INT AS TABLE OF NUMBER; -- Array of integers
如此上方的 TEST.ARRAY_TABLE 才能有效用 (TEST 為 ScheamName,即為 jdbc:oracle:thin:@10.1.1.1:1530:TEST)
相關資料:
Java: Passing Array To Oracle Stored Procedure
How to call oracle stored procedure which include user-defined type in java?
pass array to oracle procedure
注意事項:
若發現怎麼樣都無法正常傳送資料,請確認一下資料來源部分的資料型態有沒有設定錯誤
DROP TYPE TEST.ARRAY_TABLE;
CREATE OR REPLACE TYPE TEST.array_table AS TABLE OF NVARCHAR2(50);
中文系統部分,若設定為 VARCHAR2 可能會有上述無法正常傳送資料到 Stored Procedure。
如何將resultSet輸入至 Stored Procedure 當中?
回覆刪除