首先當然要先有 Oracle Object Types 存在於資料庫中,需要注意的有幾個部分 :
1.需要先有Object的名稱。
2.需要有Object Table的名稱,Object Table當然是以Object的基礎下建構出來的項目。
須要先詢問這兩個物件在Oracle資料庫裡面的名稱,以下是我們的寫法:
//需要先做出一個Object的物件
StructDescriptor structdesc01 = StructDescriptor.createDescriptor("KK.CW_TO_CHNG", conn);
//要確認的是此Objct的規格是需要輸入幾個參數值
Object[] objList = {值一,值二,值三....};
STRUCT object01 = new STRUCT(structdesc01, conn, objList);
//再設定Object Table的資料
ArrayDescriptor desc01 = ArrayDescriptor.createDescriptor("KK.CW_TT_CHNG", conn);
Object[] array01 = new Object[1];
//因為輸入的參數是可以有多筆的狀況,因此如果要多比查詢的話可以同方法將資料放入array01的Object 陣列裡面
array01[0] = object01;
//array01[1] = object02;
//array01[2] = object03;
//再將Object Table 放入ARRAY裡面
ARRAY newArray01 = new ARRAY(desc01, conn, array01);
String tSQL = "{call KK.CW_SERVER_CHECK.MAIN(?,?,?,?,?,?,?)}";
tCallableStatement = conn.prepareCall(tSQL);
tCallableStatement.setBigDecimal(1, new BigDecimal(參數1));
tCallableStatement.setString(2, 參數2);
tCallableStatement.setString(3, 參數3);
tCallableStatement.setArray(4, newArray01);
tCallableStatement.registerOutParameter(5,OracleTypes.CURSOR);
tCallableStatement.registerOutParameter(6,Types.VARCHAR);
tCallableStatement.registerOutParameter(7,Types.VARCHAR);
tCallableStatement.execute();
//此為回傳的參數值可以利用ResultSet的方式取得所有的資料(可能是因為輸入多筆因此回傳時也是多筆資料)
ResultSet resultSet = (ResultSet) tCallableStatement.getObject(5);
while(resultSet.next()){
resultSet.getString(欄位名稱);
...........
}
這是目前我們在Java裡面的做法。