首先當然要先有 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裡面的做法。

 

 

arrow
arrow
    全站熱搜

    werwolf 發表在 痞客邦 留言(0) 人氣()