关于集合类型的一个问题!求教

时间:2022-09-21 16:58:28
我想让存储过程返回一个类似二维表的结果(其中列数不固定),所以想了一个下面的办法,不知道能行不,或者有什么别的办法  高手帮帮忙

返回一个嵌套表类型的集合,而这个嵌套表的类型我想定义成varray变长数组,请问可以实现吗?
就是说嵌套表的元素数据类型可以是我自己定义的一个变长数组吗??

9 个解决方案

#1


lz的方法应该可以

#2


我试了一下 好像不行啊
CREATE OR REPLACE PACKAGE PH_900 AS
  TYPE SOK_VARRAY IS VARRAY(50) OF VARCHAR2(50);
  TYPE SOK_REC IS TABLE OF SOK_VARRAY INDEX BY BINARY_INTEGER;
  PROCEDURE PB_900(I_S_KAI_CODE     IN VARCHAR2,
                                I_S_BUN_CODE     IN VARCHAR2,
                                O_I_RTN_CNT      OUT NUMBER,
                                O_V_SOK_REC      OUT SOK_REC);
END PH_900;

#3


嵌套表的元素数据类型不可以是变长数组吗?

#4


想不通,为什么不用返回结果集?我一直想问这个问题,楼主能不能给我讲一下这样使用的必要性

#5


要求返回结果集如下:
LEVEL0  CODE0  LEVEL1 CODE1 LEVEL2 CODE2 ...... LEVEL8 CODE8
0       AAAA   1      AABB  2      AACC         8      ASDF
0       ABAA   1      ABBB  2      ABCC         8      ZXCV
0       ACAA   1      ACBB  2      ACCC         8      QWER
0       ADAA   1      ADBB  2      ADCC         8      UIOP
...
这个列数不是固定的,要根据最底层的LEAVEL和CODE值往前查询,这一期数据是9列,上一期也可能是10列,当然对于本次查询的话,所有行的列数是固定的(根据检索条件变化)。
一开始我的想法就是,定义一个游标求出底层的LEVEL和CODE
再根据这个LEVEL和CODE求出整行数据(这个过程有点麻烦,所以用游标实现),想把它放到一个变长数组里,这个数组就作为返回集合的一个元素
呵呵 想了这么个笨办法 可是行不通

如果直接返回结果集的话,怎么用? 再定义一次游标?使用临时表? 还是什么

#6


create or replace package aaa 
is
type cur is ref cursor;
procedure aa( Rst out cur );
end aaa;

create or replace package body aaa 
is
procedure aa( Rst out cur )
is
begin
  open Rst for 
     select * from table1;--你的查询sql
end;
end aaa;

#7


select * from table1;--你的查询sql

这个地方我是用另外一个游标逐行返回的,不是写了一个大的select
我要建一个临时表 把他们一行一行插入
最后再用游标返回这个select 临时表?这样吗 或者什么办法

#8


顶起来

#9


加入ORACLE的群吧;群号是:19312711

#1


lz的方法应该可以

#2


我试了一下 好像不行啊
CREATE OR REPLACE PACKAGE PH_900 AS
  TYPE SOK_VARRAY IS VARRAY(50) OF VARCHAR2(50);
  TYPE SOK_REC IS TABLE OF SOK_VARRAY INDEX BY BINARY_INTEGER;
  PROCEDURE PB_900(I_S_KAI_CODE     IN VARCHAR2,
                                I_S_BUN_CODE     IN VARCHAR2,
                                O_I_RTN_CNT      OUT NUMBER,
                                O_V_SOK_REC      OUT SOK_REC);
END PH_900;

#3


嵌套表的元素数据类型不可以是变长数组吗?

#4


想不通,为什么不用返回结果集?我一直想问这个问题,楼主能不能给我讲一下这样使用的必要性

#5


要求返回结果集如下:
LEVEL0  CODE0  LEVEL1 CODE1 LEVEL2 CODE2 ...... LEVEL8 CODE8
0       AAAA   1      AABB  2      AACC         8      ASDF
0       ABAA   1      ABBB  2      ABCC         8      ZXCV
0       ACAA   1      ACBB  2      ACCC         8      QWER
0       ADAA   1      ADBB  2      ADCC         8      UIOP
...
这个列数不是固定的,要根据最底层的LEAVEL和CODE值往前查询,这一期数据是9列,上一期也可能是10列,当然对于本次查询的话,所有行的列数是固定的(根据检索条件变化)。
一开始我的想法就是,定义一个游标求出底层的LEVEL和CODE
再根据这个LEVEL和CODE求出整行数据(这个过程有点麻烦,所以用游标实现),想把它放到一个变长数组里,这个数组就作为返回集合的一个元素
呵呵 想了这么个笨办法 可是行不通

如果直接返回结果集的话,怎么用? 再定义一次游标?使用临时表? 还是什么

#6


create or replace package aaa 
is
type cur is ref cursor;
procedure aa( Rst out cur );
end aaa;

create or replace package body aaa 
is
procedure aa( Rst out cur )
is
begin
  open Rst for 
     select * from table1;--你的查询sql
end;
end aaa;

#7


select * from table1;--你的查询sql

这个地方我是用另外一个游标逐行返回的,不是写了一个大的select
我要建一个临时表 把他们一行一行插入
最后再用游标返回这个select 临时表?这样吗 或者什么办法

#8


顶起来

#9


加入ORACLE的群吧;群号是:19312711