title: Oracle's COLLECT function creates new collection data type with random name
body: <p>Oracle'c COLLECT function triggers creation of a new collection type. 
  Is there a way to disable this behavior ? </p>
  
  <p>here is what is happening ... </p>
  
  <p>check existing user types </p>
  
  <pre><code>select object_name from user_objects where object_type = 'TYPE'
  no rows selected.
  </code></pre>
  
  <p>create user data type with collection VARRAY wrapper type</p>
  
  <pre><code>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;
  </code></pre>
  
  <p>check types  ...</p>
  
  <pre><code>select object_name from user_objects where object_type = 'TYPE'
  
  OBJECT_NAME                                                                     
  ------------
  TEST_T                                                                          
  ARRAY_TEST_T 
  
  2 rows selected.
  </code></pre>
  
  <p>now this query will trigger creation of a new collection type: </p>
  
  <pre><code>select cast(collect(TEST_T(c1,c2)) AS ARRAY_TEST_T) 
  from (  select '1.1' as c1, '1.2' as c2 from dual ) ;
  </code></pre>
  
  <p>check types again ...</p>
  
  <pre><code>select object_name from user_objects where object_type = 'TYPE'
  OBJECT_NAME                                                                     
  -----------------------------
  TEST_T                                                                          
  SYSTP5Iel7MEkRT2osGnB/YcB4A==                                                   
  ARRAY_TEST_T                                                                    
  
  3 rows selected.
  </code></pre>
  
  <p>Oracle has created new collection type <strong>"SYSTP5Iel7MEkRT2osGnB/YcB4A=="</strong>  with following spec : </p>
  
  <pre><code>CREATE OR REPLACE TYPE "SYSTPzGCo9gclT3WmlUX5SNtEPg==" AS TABLE OF TEST_T
  </code></pre>