2010-01-27 12 views
5

In all_objects Theres aa Spalte namens SUBOBJECT_NAME und die docs sagen, dass dies:Was ist ein Unterobjekt für einen Typ?

Name der Subobjekt (zB Partition)

Wenn Sie das tun die folgende Abfrage:

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

Sie finden MDSYS.SDO_TGL_OBJECT_ARRAY ein Unterobjekt namens $VNS_1. Was ist es? Wie können Typen Unterobjekte haben?

+0

Quick Google gibt mir den Eindruck, dass es untergeordnete Objekte bedeutet –

+0

Ihre Beispielabfrage verwendet ALL_TYPES anstelle von ALL_OBJECTS, die Ihre Frage verwirrt. – APC

+0

Whoops, verwendete die falsche Abfrage:/ – thecoop

Antwort

2

Manchmal bedeutet die Dokumentation genau das, was es sagt.

Zur Veranschaulichung habe ich eine Tabelle namens RANGE_PART_INTERVAL_TABLE, die drei Partitionen hat. Ich führe die entsprechende Abfrage gegen ALL_OBJECTS, und lo!

Ich denke, das Problem ist die Verwendung des Wortes "Objekte". Oracle kommt aus einer Zeit vor der objektorientierten Programmierung (wenn Sie sich so etwas vorstellen können). Sein Datenwörterbuch verwendet "Datenbankobjekt", um "Sache" zu bedeuten - Tabelle, Ansicht, Reihenfolge, Prozedur, usw. Als Oracle OOP in die Datenbank einführte, verwendete es das Schlüsselwort TYPE .für diese neuen Dinge. So ist die Ansicht ALL_OBJECTS eine Liste aller Dinge Ihr Schema hat Berechtigungen auf, nicht nur die benutzerdefinierten Typen.

bearbeiten

Nur klar zu sein, das hat nichts mit Typ inheritence zu tun.

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> 

inheritence wird durch die Benutzer/ALL/DBA_TYPES Ansicht gezeigt, die den Supertyp des abgeleiteten Typs zeigt: ...

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 betont:

Typen können keine Partitionen haben

In dem spezifischen Fall zitiert sie $VNS_1 ist ein Artefakt des Typs Evolution. Wenn wir einen ALTER TYPE ausführen, nachdem Type verwendet wurde, erstellt Oracle eine Version davon. Wir können sehen, in den% _TYPE_VERSIONS Ansichten ....

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

Aber soweit ich weiß, können Typen keine Partitionen haben. Also muss diese Spalte etwas anderes bedeuten, wenn das Objekt ein Typ ist, aber ich kann keine Informationen darüber finden, was es für einen Typ bedeutet. – thecoop