2010-01-27 4 views
5

В all_objects Theres аа колонка называется SUBOBJECT_NAME, и документы говорят, что это:Что такое подобъект для типа?

Название субобъекта (например, раздел)

Если вы сделаете следующий запрос:

select * 
    from all_objects 
where owner = 'MDSYS' 
    and object_name = 'SDO_TGL_OBJECT_ARRAY' 

Вы обнаружили, что MDSYS.SDO_TGL_OBJECT_ARRAY имеет подобъект под названием $VNS_1. Что это? Как типы могут иметь подобъекты?

+0

Quick google дает мне впечатление, что это означает дочерние объекты –

+0

В вашем примере запроса используется ALL_TYPES вместо ALL_OBJECTS, что смущает ваш вопрос. – APC

+0

whoops, использовал неправильный запрос:/ – thecoop

ответ

2

Иногда документация означает именно то, что она говорит.

В качестве иллюстрации у меня есть таблица под названием RANGE_PART_INTERVAL_TABLE, которая имеет три раздела. Я запускаю соответствующий запрос для ALL_OBJECTS и lo!

SQL> select object_name, object_type, subobject_name 
    2 from all_objects 
    3 where object_name = 'RANGE_PART_INTERVAL_TABLE' 
    4/

OBJECT_NAME     OBJECT_TYPE   SUBOBJECT_NAME 
------------------------------ ------------------- --------------- 
RANGE_PART_INTERVAL_TABLE  TABLE 
RANGE_PART_INTERVAL_TABLE  TABLE PARTITION  SYS_P60 
RANGE_PART_INTERVAL_TABLE  TABLE PARTITION  SYS_P61 
RANGE_PART_INTERVAL_TABLE  TABLE PARTITION  SYS_P62 

SQL> 

Я думаю, что проблема заключается в использовании слова «объекты». Oracle приходит от времени до объектно-ориентированного программирования (если вы можете себе это представить). Его словарь данных использует «объект базы данных» для обозначения «вещь» - таблица, представление, последовательность, процедура и т. Д. Когда Oracle вводил ООП в базу данных, он использовал ключевое слово TYPE. Для этих новых вещей. Таким образом, представление ALL_OBJECTS представляет собой список всех вещей, на которые у вашей схемы есть привилегии, а не только на пользовательские типы.

редактировать

Просто чтобы быть ясно, что это не имеет ничего общего с типом наследования.

SQL> create type my_type as object (attr1 number) not final 
    2/

Type created. 

SQL> create type my_sub_1 under my_type (attr2 date) 
    2/

Type created. 

SQL> select object_name, object_type, subobject_name 
    2 from all_objects 
    3 where object_name = 'MY_TYPE' 
    4/

OBJECT_NAME     OBJECT_TYPE   SUBOBJECT_NAME 
------------------------------ ------------------- --------------- 
MY_TYPE      TYPE 

SQL> 

Наследование показан на виде ПОЛЬЗОВАТЕЛЯ/ВСЕ/DBA_TYPES, который показывает супертипом производного типа: ...

SQL> select type_name, supertype_name 
    2 from all_types 
    3 where type_name in ('MY_TYPE', 'MY_SUB_1') 
    4/

TYPE_NAME      SUPERTYPE_NAME 
------------------------------ ------------------------------ 
MY_SUB_1      MY_TYPE 
MY_TYPE 

SQL> 

edit2

TheCoop указывает:

типы не могут иметь перегородки

В конкретном случае, который они цитируют, $VNS_1 является артефактом типа Evolution. Когда мы выполняем ALTER TYPE после того, как Type использовался, Oracle создает его версию. Мы можем увидеть это в воззрениях% _TYPE_VERSIONS ....

SQL> select * from dba_type_versions 
    2 where owner = 'MDSYS' 
    3 and type_name = 'SDO_TGL_OBJECT_ARRAY' 
    4/

OWNER       TYPE_NAME      VERSION# 
------------------------------ ------------------------------ ---------- 
TYPECODE      STATUS  LINE 
------------------------------ ------- ---------- 
TEXT 
------------------------------------------------------------------------------ 
HASHCODE 
---------------------------------- 
MDSYS       SDO_TGL_OBJECT_ARRAY     1 
COLLECTION      VALID   1 
type SDO_TGL_OBJECT_ARRAY 
61EB9AEC10198F71C141D13B32F52C00A8 

MDSYS       SDO_TGL_OBJECT_ARRAY     1 
COLLECTION      VALID   2 
             as VARRAY (1000000) of SDO_TGL_OBJECT 
61EB9AEC10198F71C141D13B32F52C00A8 

MDSYS       SDO_TGL_OBJECT_ARRAY     2 
COLLECTION      VALID   1 
type SDO_TGL_OBJECT_ARRAY 
6184209BAEF1F731B937760C2BA8B45688 

MDSYS       SDO_TGL_OBJECT_ARRAY     2 
COLLECTION      VALID   2 
             as VARRAY (1000000) of SDO_TGL_OBJECT 
6184209BAEF1F731B937760C2BA8B45688 

MDSYS       SDO_TGL_OBJECT_ARRAY     2 
COLLECTION      VALID   3 
    alter type SDO_TGL_OBJECT_ARRAY modify limit 10000000 cascade 
6184209BAEF1F731B937760C2BA8B45688 


SQL> 

Find out more.

+0

Но, насколько я знаю, типы не могут иметь разделов. Таким образом, этот столбец должен означать что-то еще, когда объект является типом, но я не могу найти информацию о том, что он означает для типа. – thecoop

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