我在oracle中有一个定义为NOT FINAL
的对象类型。我想找出这种类型的所有亚型。可能吗?
答案 0 :(得分:4)
您可以使用列SUPERTYPE_NAME
从表ALL_TYPES或USER_TYPES获取此信息:
SUPERTYPE_NAME
VARCHAR2(30)
超类型的名称(如果类型不是子类型,则为NULL)
SUPERTYPE_NAME
NULL
正是您正在寻找的。 p>
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_types
或dba_types
。例如,要获取子类型名称:
select type_name
from user_types
where supertype_name = 'YOUR_TYPE_NAME';
尽管如此,该视图中还有很多其他有趣的信息。如果您使用全部或DBA视图,则可能需要同时对owner
和supertype_owner
进行过滤。