3

次の 2 つのオブジェクト タイプを作成しました。

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明らかなものは見つかりません。

4

1 に答える 1

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;

ノート*

これらの列名は内部的なものであり、将来のパッチ/リリースで変更される可能性があるため、どのアプリケーションでも使用しないでください。

于 2013-01-22T15:48:42.023 に答える