分组在oracle对象的表中

时间:2015-12-18 10:34:56

标签: oracle

我从一个对象表中选择一些信息并填充其他类型。

我正在尝试在对象表中使用GROUP BY子句。 但是我一直得到ORA-00979: not a GROUP BY expression

my_type          object_type1;
l_TBL_OF_my_type object_type1_tbl; --table of object_type1
Source_type_TBL  object_type2_tbl; --table of another object_type

SELECT my_type(TBL.NAME,
               TBL.SOURCE_NAME,
               null,
               null,
               TBL.TARGET_NAME,
               NULL,
               NULL,
               NULL,
               1,
               NULL) BULK COLLECT
      INTO l_TBL_OF_my_type
      FROM TABLE(Source_type_TBL) TBL
      GROUP BY TBL.TARGET_NAME;

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

试试这个。 COLLECT是一个聚合函数,它将任何类型的列作为其参数,并创建一个输入类型的嵌套表。
cast - 将临时收集转换为您的收藏。

SELECT cast(collect(my_type(TBL.NAME,
               TBL.SOURCE_NAME,
               null,
               null,
               TBL.TARGET_NAME,
               NULL,
               NULL,
               NULL,
               1,
               NULL))  as object_type1_tbl)
      INTO l_TBL_OF_my_type
      FROM TABLE(Source_type_TBL) TBL
      GROUP BY TBL.TARGET_NAME;

答案 1 :(得分:0)

我已经解决了。

我必须按所有选定的字段进行分组。

SELECT my_type(TBL.NAME,
               TBL.SOURCE_NAME,
               null,
               null,
               TBL.TARGET_NAME,
               NULL,
               NULL,
               NULL,
               1,
               NULL) BULK COLLECT
      INTO l_TBL_OF_my_type
      FROM TABLE(Source_type_TBL) TBL
      GROUP BY TBL.NAME, TBL.SOURCE_NAME, TBL.TARGET_NAME;