oracle在哪里存储我的对象实例?

时间:2012-12-01 15:40:04

标签: oracle oracle10g oracle-type

我创建了以下两种对象类型:

create or replace type person_typ as object (
    person#                 varchar(10)
) not final;

create or replace type salesperson_typ under person_typ (
    salesperson#            varchar(10),
    sSurname                varchar(10),
    sForename               varchar(10),
    dateOfBirth             date
);

create table person_tab of person_typ (
    person# primary key
);

我已经使用以下方式插入了一行:

insert into person_tab
values (salesperson_typ('p1','s1', 'Jones', 'John', sysdate));

我可以使用以下内容检索:

select 
    treat(value(s) as salesperson_typ).person# as person_number, 
    treat(value(s) as salesperson_typ).sSurname as sSurname
from 
    person_tab s
;

但是,如果我查看person_tab,我只会看到以下内容:

SQL> select * from person_tab;

PERSON#
----------
p1

我很好奇,salesperson特定数据存储在哪里?我几乎期待找到salesperson表,但我找不到任何明显的表。

1 个答案:

答案 0 :(得分:1)

您的对象无形地存储在同一个表中。 您可以通过查询USER_TAB_COLS来检查列:

SELECT *
FROM user_tab_cols
WHERE table_name = 'PERSON_TAB';

然后,您可以使用您在查询中发现的列名*(SYS_NC_ROWINFO $除外,它会为我抛出错误)。

SELECT SYS_NC_OID$
      ,SYS_NC_TYPEID$ 
    --,SYS_NC_ROWINFO$
      ,PERSON#        
      ,SYS_NC00005$   
      ,SYS_NC00006$   
      ,SYS_NC00007$   
      ,SYS_NC00008$   
FROM PERSON_TAB;

注意*

您不应在任何应用程序中使用这些列名称,因为它们是内部的,在将来的修补程序/版本中可能会更改。