Мне нужно создать коллекцию из элементов коллекции во встроенном представлении. Я попытался деагрегировать коллекцию и снова агрегировать ее, используя функции сбора и таблицы, но это не удалось с ORA-03113.
Ниже приведена упрощенная версия запроса, вызвавшего проблему.
В моей реализации у меня будет много уровней вложенных запросов, объединенных объединениями в один запрос, который должен объединять все коллекции в одну. Из соображений производительности (дорогое переключение контекста) реализация кода PL/SQL для объединения коллекций невозможна.
Большое спасибо за ваши отзывы/предложения.
SELECT BANNER FROM V$VERSION
/
CREATE OR REPLACE TYPE OBJECT_ID_TAB_T IS TABLE OF NUMBER(11);
/
SELECT OWNER, CAST(COLLECT( MULTISET(SELECT COLUMN_VALUE FROM TABLE((OBJECT_ID_LIST) ))) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM (SELECT OWNER, OBJECT_NAME, CAST(COLLECT(OBJECT_ID) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM ALL_OBJECTS
GROUP BY OWNER, OBJECT_NAME
)
GROUP BY OWNER
/
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
5 rows selected.
Type created.
SELECT OWNER, CAST(COLLECT( MULTISET(SELECT COLUMN_VALUE FROM TABLE((OBJECT_ID_LIST) ))) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM (SELECT OWNER, OBJECT_NAME, CAST(COLLECT(OBJECT_ID) AS OBJECT_ID_TAB_T) AS OBJECT_ID_LIST
FROM ALL_OBJECTS
GROUP BY OWNER, OBJECT_NAME
)
GROUP BY OWNER
*
Error at line 0
ORA-03113: end-of-file on communication channel
Process ID: 8000
Session ID: 154 Serial number: 164
Script Terminated on line 25.