oracle存储过程返回结果集问题
现在有这样几种java对象:A,B,C,D,
分别有这样的属性: A包含Aid和B的list, B包含Bid和C的list,C包含Cid和D的list。
调用方法getA()时,A会调用B的方法getB(),B会调用C的方法getC(),C会调用D的方法getD(),最后得到的A的对象中包含B的list,其中每个B又包含C的list,每个C又包含D的list,结构有些复杂。
上面的方式是循环调用,如果是每次调用getD,getC等方法都要访问数据库效率就太低了,所以打算使用存储过程来重写。
于是现在问题就出现了:使用oracle存储过程时,如何返回一个特别复杂的结果集?
如上所述,A包含B, B包含C, C包含D,而且都是List,在数据库中如何实现返回这样一个复杂的结果集?
我知道返回的如果是个结果集一般是使用cursor的,但是这么复杂的一个结果集可以用cursor实现吗?
我还想过自己定义类型,创建type,但是list要如何实现呢?我想用varray,但是varray是要提前知道长度的,我却不知道A中包含多少个B,B中包含多少个C,所以现在不知道怎么做。
------解决方案--------------------
给你个思路
1、创建一个临时表(on commit delete row事务级),字段自己对应吧。例子:
SQL code
-- Create table
create global temporary table QBTB_XT_HS
(
C_SYS_TYPE VARCHAR2(30),
C_RYBH VARCHAR2(30),
N_LJCS NUMBER(3),
C_LASJ VARCHAR2(20),
C_LADW VARCHAR2(4000),
C_AJBH VARCHAR2(30),
C_YXJZRQ VARCHAR2(20),
C_AJLB VARCHAR2(4000),
C_XXXX VARCHAR2(4000),
C_BY2 VARCHAR2(20)
)
on commit delete rows;