Oracle收集函数为PUBLIC创建内部类型和特权

时间:2018-03-22 06:06:02

标签: oracle plsql

我在我的查询中使用COLLECT函数,它正在创建内部系统生成的类型,即使它是对已存在的SQL类型集合的CAST

这样的事情:

cast(collect(opentrades_id)as t_dds_number)

现在它正在创建一个内部创建的类型,如SYSTPZrEBTIYRDGYUI==

此外,用户正在向PUBLIC授予执行权。

我想了解为什么要创建系统生成的类型并为PUBLIC提供执行权限?

1 个答案:

答案 0 :(得分:1)

这就是它的工作方式。

为了投射 TO ,我们必须投射 FROM 的东西,所以我们默默地创建它以满足需要

SQL> create table t as select rownum x
  2  from dual connect by level <= 10;

Table created.

SQL>
SQL> select type_name from user_types;

no rows selected

SQL>
SQL> select cast(collect(x) as sys.odcinumberlist) from t;

CAST(COLLECT(X)ASSYS.ODCINUMBERLIST)
----------------------------------------------------------------
ODCINUMBERLIST(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

1 row selected.

SQL>
SQL> select type_name from user_types;

TYPE_NAME
----------------------------------------------------------------
ST000012SwVFQsQ4m5aVQ27Pg9mw=

1 row selected.

SQL>
SQL>
SQL> select text from user_source
  2  where name = 'ST000012SwVFQsQ4m5aVQ27Pg9mw=';

TEXT
----------------------------------------------------------------
TYPE         "ST000012SwVFQsQ4m5aVQ27Pg9mw=" AS TABLE OF NUMBER

附录 - 避免类型

的解决方法
SQL> select cast(multiset(select x from t) as sys.odcinumberlist) from dual;

CAST(MULTISET(SELECTXFROMT)ASSYS.ODCINUMBERLIST)
----------------------------------------------------------------------------
ODCINUMBERLIST(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)