Функция Oracle'C COLLECT запускает создание нового типа коллекции.
Есть ли способ отключить это поведение?
вот что происходит ...
проверить существующие типы пользователей
select object_name from user_objects where object_type = 'TYPE'
no rows selected.
создать тип данных пользователя с типом оболочки VARRAY коллекции
CREATE OR REPLACE TYPE TEST_T
AS OBJECT (C1 VARCHAR2(20 BYTE), C2 VARCHAR2 (11 Byte));
CREATE OR REPLACE TYPE ARRAY_TEST_T AS VARRAY(200) OF TEST_T;
проверка типов ...
select object_name from user_objects where object_type = 'TYPE'
OBJECT_NAME
------------
TEST_T
ARRAY_TEST_T
2 rows selected.
теперь этот запрос будет инициировать создание нового типа коллекции:
select cast(collect(TEST_T(c1,c2)) AS ARRAY_TEST_T)
from ( select '1.1' as c1, '1.2' as c2 from dual ) ;
снова проверьте типы ...
select object_name from user_objects where object_type = 'TYPE'
OBJECT_NAME
-----------------------------
TEST_T
SYSTP5Iel7MEkRT2osGnB/YcB4A==
ARRAY_TEST_T
3 rows selected.
Oracle создала новый тип коллекции "SYSTP5Iel7MEkRT2osGnB / YcB4A ==" со следующими характеристиками:
CREATE OR REPLACE TYPE "SYSTPzGCo9gclT3WmlUX5SNtEPg==" AS TABLE OF TEST_T