我有一個oracle程序返回兩個參數,第一個是數組對象類型,第二個是數字。如何從oracle程序中獲取java中的對象類型解析數組
我的程序是:
CREATE OR REPLACE PROCEDURE APPS.xx_push_notification (
p_user_name IN VARCHAR2,
p_hr_type IN VARCHAR2,
p_ret_array OUT NOCOPY XX_WF_SVC_NTF_ARRAY,
p_ret_array_size OUT NOCOPY NUMBER
)
AS
--l_item_type IN VARCHAR2,l_message_names IN VARCHAR2,
l_orig_system VARCHAR2 (4000);
l_orig_system_id NUMBER;
l_ret_array xx_wf_svc_ntf_array;
l_ret_array_size NUMBER;
l_item_type VARCHAR2 (1000);
l_message_names VARCHAR2 (4000);
l_latest_ntf_id NUMBER;
CURSOR cur_hrms (
cur_orig_system VARCHAR2,
cur_orig_system_id NUMBER
)
IS
......................
......................
......................
BEGIN
......................
......................
......................
p_ret_array := xx_wf_svc_ntf_array();
IF p_hr_type = 'HR_ABSENCES'
THEN
FOR c1_rec IN cur_hrms (l_orig_system, l_orig_system_id)
LOOP
p_ret_array.EXTEND;
p_ret_array (p_ret_array.COUNT) :=
xx_wf_svc_ntf_record (c1_rec.NOTIFICATION_ID,
c1_rec.CONTEXT,
c1_rec.FROM_USER,
c1_rec.TO_USER,
c1_rec.SUBTYPE);
END LOOP;
p_ret_array_size := p_ret_array.COUNT;
END IF;
END;
/
預言類型的對象:
create or replace type xx_wf_svc_ntf_record is object (NOTIFICATION_ID NUMBER,
CONTEXT VARCHAR2(2000),
FROM_USER VARCHAR2(320),
TO_USER VARCHAR2(320),
SUBJECT VARCHAR2(2000),
SUBTYPE VARCHAR2(32));
/
預言類型數組:
create or replace type xx_wf_svc_ntf_array is table of xx_wf_svc_ntf_record ;
/
我的Java代碼是:
.......
.......
db = new DBConnectionManager();
conn=db.getConnection();
if(conn!=null)
{
cstmt = conn.prepareCall("{call xx_push_notification(?, ?, ?, ?)}");
cstmt.setString(1, UserName);
cstmt.setString(2, NotificationType);
cstmt.registerOutParameter(3, OracleTypes.ARRAY,typeTableName);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.execute();
int newRecord=cstmt.getInt(4);
System.out.println("Total New Record : "+newRecord);
}
.........
.........
我得到2nd返回參數是返回數組大小。我有很多R & D用於解析oracle數組。我得到了單個數組解析,這是由oracle程序返回的。但我不知道如何解析數組oracle對象。
在此先感謝。
沒有任何想法。我在java.sql.Struct上進行了研發。 – kels
你可以嘗試調試你的代碼,看看'cstmt.getObject(3)'返回了什麼。如果它以某種方式實現'java.sql.Array',那麼你可以嘗試我建議你的代碼。它(或類似的東西)無論如何都應該工作,因爲JDBC驅動程序應該總是返回實現'java.sql。*'接口的東西 –