2010-01-27 70 views
5

all_objects孤單AA柱稱爲SUBOBJECT_NAME,以及文檔說這是:什麼是類型的子對象?

子對象的名稱(例如,分區)

如果你這樣做下面的查詢:

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

您發現MDSYS.SDO_TGL_OBJECT_ARRAY有一個名爲$VNS_1的子對象。它是什麼?類型如何具有子對象?

+0

快速谷歌給我的印象是它的意思是子對象 – 2010-01-27 17:28:09

+0

你的示例查詢使用ALL_TYPES而不是ALL_OBJECTS,這會混淆你的問題。 – APC 2010-01-28 07:15:51

+0

哎呀,使用了錯誤的查詢:/ – thecoop 2010-01-28 08:27:41

回答

2

有時文檔意味着正是它所說的

舉例來說,我有一張名爲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> 

我覺得問題是使用「objects」這個詞。 Oracle來自面向對象編程之前的時間(如果你能想象這樣的事情)。它的數據字典使用「數據庫對象」來表示「事物」 - 表,視圖,序列,過程等。當Oracle將OOP引入數據庫時​​,它使用關鍵字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> 

傳承由用戶/ 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使用後,當我們執行一個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> 

Find out more

+0

但據我所知,類型不能有分區。所以當這個對象是一個類型時,這個列必須表示其他的東西,但是我找不到它對於一個類型意味着什麼的信息。 – thecoop 2010-01-28 08:29:13

相關問題