日期:2014-05-17  浏览次数:20773 次

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;