2016-09-27 3 views

ответ

4

Вы можете получить это из таблиц ALL_TYPES или USER_TYPES с колонкой SUPERTYPE_NAME:

SUPERTYPE_NAMEVARCHAR2(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

Вы можете запросить user_types (или all_types, или dba_types, если вы не являетесь владельцем). Например, чтобы получить названия подтипов:

select type_name 
from user_types 
where supertype_name = 'YOUR_TYPE_NAME'; 

В этом обзоре есть много другой интересной информации. Если вы используете представления ALL или DBA, вы можете фильтровать как на owner, так и на supertype_owner.

Смежные вопросы