インライン ビュー内のコレクション内の要素からコレクションを作成する必要があります。コレクションを集約解除し、collect および table 関数を使用して再度集約しようとしましたが、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.