Oracle 的 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
最佳答案
阅读http://www.oracle-developer.net/display.php?id=306
我认为当你定义时它会起作用:
创建或替换类型 ARRAY_TEST_T AS 表 TEST_T;
所以没有 ... 的 varray(200) ,但是 ... 的表。
关于Oracle的COLLECT函数创建具有随机名称的新集合数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834112/