我创建了以下两种对象类型:
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
表,但我找不到任何明显的表。
答案 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;
注意* 强>
您不应在任何应用程序中使用这些列名称,因为它们是内部的,在将来的修补程序/版本中可能会更改。