oracle对象表中的分组依据

oracle对象表中的分组依据,oracle,Oracle,我正在从对象表中选择一些信息并填充另一种类型 我试图在对象表中使用GROUPBY子句。 然而,我一直得到的是ORA-00979:不是一组表达式 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.NA

我正在从对象表中选择一些信息并填充另一种类型

我试图在对象表中使用GROUPBY子句。 然而,我一直得到的是
ORA-00979:不是一组表达式

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;
如何解决这个问题?

试试这个。
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;
试试这个。
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;
我已经解决了

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

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;
我已经解决了

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

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;

你这样做的目的是什么?据我所知,你没有做任何聚合。如果您可以更新您的问题以提供完整的测试用例,这样我们就可以自己重新创建您的类型、表、数据等(因为我们看不到您的数据库或其内容),以及您希望select语句返回的数据。如果删除
GROUP by
子句是否有效?如果不使用my_type()批量收集是否有效?这样做的目的是什么?据我所知,你没有做任何聚合。如果您可以更新您的问题以提供完整的测试用例,这样我们就可以自己重新创建您的类型、表、数据等(因为我们看不到您的数据库或其内容),以及您希望select语句返回的数据。如果删除
GROUP by
子句是否有效?如果不使用my_type()批量收集是否有效?