gpt4 book ai didi

java - 如何从oracle过程中获取java中对象类型解析的数组

转载 作者:行者123 更新时间:2023-12-01 23:12:23 26 4
gpt4 key购买 nike

我有一个 oracle 过程,它返回两个参数,第一个是数组对象类型,第二个是数字。

我的程序是:

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;
/

oracle 类型对象:

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));
/

oracle 类型数组:

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);
}
.........
.........

我得到第二个输出参数,它是返回数组大小。我对解析oracle类型数组有很多研发。我得到了由 oracle 过程返回的单个数组解析。但我不知道如何解析数组oracle类型对象。

提前致谢。

最佳答案

作为输出参数,如果您尝试使用 Oracle 类型和类,您的代码可能会被您正在使用的任何连接池破坏。我建议您将其视为由 java.sql.Struct 实例组成的普通 java.sql.Array

也许您可以通过简单地执行以下操作来使其工作:

java.sql.Struct records[] = 
(java.sql.Struct[]) ((java.sql.Array) cstmt.getObject(3)).getArray()

然后您可以简单地获取该数组中每个 Struct 的属性。

关于java - 如何从oracle过程中获取java中对象类型解析的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21674661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com