查找对象类型的所有子类型

时间:2016-09-27 09:14:39

标签: oracle plsql

我在oracle中有一个定义为NOT FINAL的对象类型。我想找出这种类型的所有亚型。可能吗?

2 个答案:

答案 0 :(得分:4)

您可以使用列SUPERTYPE_NAME从表ALL_TYPESUSER_TYPES获取此信息:

  

SUPERTYPE_NAME VARCHAR2(30)
  超类型的名称(如果类型不是子类型,则为NULL)

SUPERTYPE_NAME NULL正是您正在寻找的。

Oracle在执行计划中使用的标准类型示例:

SELECT TYPE_NAME,  SUPERTYPE_OWNER ,  SUPERTYPE_NAME ,  FINAL    
FROM SYS.ALL_TYPES
WHERE  SUPERTYPE_NAME ='SQL_PLAN_ROW_TYPE'

结果

TYPE_NAME                       SUPERTYPE_OWNER     SUPERTYPE_NAME          FINAL
SQL_PLAN_ALLSTAT_ROW_TYPE       SYS                 SQL_PLAN_ROW_TYPE       NO 
SQL_PLAN_STAT_ROW_TYPE          SYS                 SQL_PLAN_ROW_TYPE       YES

2行是SQL_PLAN_ROW_TYPE

的子类型

请注意ALL_TYPES列出了数据库中的所有对象类型。您应该使用USER_TYPES来获取您创建的那些

如果您希望所有自定义类型都是子类型,则可以这样做:

SELECT TYPE_NAME,  SUPERTYPE_OWNER ,  SUPERTYPE_NAME ,  FINAL    
FROM SYS.USER_TYPES
WHERE  SUPERTYPE_NAME IS NOT NULL
ORDER BY SUPERTYPE_OWNER ,  SUPERTYPE_NAME, FINAL, TYPE_NAME

答案 1 :(得分:1)

如果您不是所有者,则可以查询user_types视图(或all_typesdba_types。例如,要获取子类型名称:

select type_name
from user_types
where supertype_name = 'YOUR_TYPE_NAME';

尽管如此,该视图中还有很多其他有趣的信息。如果您使用全部或DBA视图,则可能需要同时对ownersupertype_owner进行过滤。