2010年6月1日 星期二

[筆記]如何用java呼叫oracle store procedure並接收 oracle object的回傳參數

因應和介接系統的API stored procedure修改,將原本的回傳參數型態由oracle cursor
改成oracleobject,機歪老闆又把這項雜事丟給我,要我測試在我們的系統上是否可行。

雖然網路上的參考文獻很多,不過大部分都是傳送或接收陣列型態的參數給stored procedure,
所以花了一些功夫整理了一下關鍵的內容。




conn = this.getConnectionAdapter().getNewConnection();
vendorConn = (OracleConnection)((WLConnection)conn).getVendorConnection();
call = (OracleCallableStatement)vendorConn.prepareCall(" begin twm_pg_ec_test.pc_get_oracle_object_demo(?,?) ; end;"); //引號內是stored procedure
//的名稱,問號是傳給他即接受的對應參數。

call.setString(1, "EC");//設定第一個參數
call.registerOutParameter(2, OracleTypes.STRUCT, "ECUSER2.EMPLOYEETYPE");
//設定第二個回傳的參數,同時指定他在資料庫上的object type(第二個參數)
call.executeQuery();

oracle.sql.STRUCT emp = (oracle.sql.STRUCT)call.getObject(2); //解析回傳的第二個參數
oracle.sql.Datum[] attrs = emp.getOracleAttributes();//取得所有oracle object的屬性

//取得oracle object屬性的值
int id= attrs[0].intValue();
String firstName = attrs[1].stringValue();
String lastName = attrs[2].stringValue();
java.util.Date dob = attrs[3].dateValue();
String phone = attrs[4].stringValue();







沒有留言: