2010-01-27 6 views
5

En all_objects theres aa columna llamada SUBOBJECT_NAME, y los documentos dicen que esto es:¿Qué es un subobjeto para un tipo?

Nombre del subobjeto (por ejemplo, la partición)

Si hacer la siguiente consulta:

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

Encuentra que MDSYS.SDO_TGL_OBJECT_ARRAY tiene un subobjeto llamado $VNS_1. ¿Qué es? ¿Cómo pueden los tipos tener subobjetos?

+0

Google rápido me da la impresión de que significa objetos secundarios –

+0

Su consulta de ejemplo usa ALL_TYPES en lugar de ALL_OBJECTS, lo que confunde su pregunta. – APC

+0

whoops, utilizó la consulta incorrecta:/ – thecoop

Respuesta

2

A veces la documentación significa exactamente lo que dice.

A modo de ilustración, tengo una tabla llamada RANGE_PART_INTERVAL_TABLE que tiene tres particiones. Ejecuto la consulta pertinente contra ALL_OBJECTS, y ¡ay!

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> 

Creo que el problema es el uso de la palabra "objetos". Oracle viene de un tiempo anterior a la Programación Orientada a Objetos (si se puede imaginar tal cosa). Su diccionario de datos usa "objeto de base de datos" para significar "cosa" - tabla, vista, secuencia, procedimiento, etc. Cuando Oracle introdujo OOP en la base de datos, usó la palabra clave TYPE .para estas cosas nuevas. Entonces, la vista ALL_OBJECTS es una lista de todas las cosas en las cuales su esquema tiene privilegios, no solo los tipos definidos por el usuario.

edición

Para ser claros, esto no tiene nada que ver con el tipo de sucesiones.

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 se muestra mediante la vista de usuario/ALL/DBA_TYPES, que muestra el supertipo del tipo derivado: ...

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 señala:

tipos no pueden tener particiones

En el caso específico que citan $VNS_1 es un artefacto de Type Evolution. Cuando ejecutamos un ALTER TYPE luego de que Type ha estado en uso, Oracle crea una versión del mismo. Esto lo podemos ver en las vistas% _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

Pero, hasta donde yo sé, los tipos no pueden tener particiones. Entonces, esta columna debe significar algo más cuando el objeto es un tipo, pero no puedo encontrar información sobre lo que significa para un tipo. – thecoop