Что такое подобъект для типа? - PullRequest
5 голосов
/ 27 января 2010

В all_objects есть столбец с именем SUBOBJECT_NAME, и в документах говорится, что это:

Имя подобъекта (например, раздела)

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

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

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

1 Ответ

2 голосов
/ 28 января 2010

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

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

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> 

Наследование отображается представлением USER / ALL / 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 является артефактом Type Evolution. Когда мы выполняем ALTER 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>

Узнать больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...