物件表

oracle_db發表於2012-04-25
物件表是基於一個TYPE建立的表,而不是列的集合

如:會話1

物件表的建立


SQL> conn scott/scott
Connected.
SQL> create or replace type address_type-----先建立型別
  2  as object
  3  (city varchar2(30),
  4  street varchar2(30),
  5  state varchar2(2),
  6  zip number
  7  )
  8  /

Type created.

SQL> create or replace type person_type
  2  as object
  3  (name varchar2(20),
  4  dob date,
  5  home_address address_type,
  6  work_address address_type
  7  )
  8  /

Type created.

SQL> desc person_type
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(20)
 DOB                                                DATE
 HOME_ADDRESS                                       ADDRESS_TYPE
 WORK_ADDRESS                                       ADDRESS_TYPE

SQL> desc address_type;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CITY                                               VARCHAR2(30)
 STREET                                             VARCHAR2(30)
 STATE                                              VARCHAR2(2)
 ZIP                                                NUMBER
SQL> create table people of person_type;---根據型別建立表

Table created.

SQL> desc person_type;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(20)
 DOB                                                DATE
 HOME_ADDRESS                                       ADDRESS_TYPE
 WORK_ADDRESS                                       ADDRESS_TYPE

SQL> desc people
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(20)
 DOB                                                DATE
 HOME_ADDRESS                                       ADDRESS_TYPE
 WORK_ADDRESS                                       ADDRESS_TYPE
QL> insert into people ---向物件表中插入資料
  2  values ( 'Tom', '15-mar-1965',
  3            address_type( 'Reston', '123 Main Street', 'Va', '45678' ),
  4            address_type( 'Redwood', '1 Oracle Way', 'Ca', '23456' ) );

1 row created.

SQL> select name,p.home_address.city from people p;--查詢物件表【列名.集合中屬性】

NAME                 HOME_ADDRESS.CITY
-------------------- ------------------------------
Tom                  Reston

我們DESC PEOPLE看到只有4個屬性,有兩個是集合型別,下面在系統資料字典中看下物件表的結構
SQL> select name, segcollength
  2   from sys.col$
  3   where obj# = ( select object_id
  4   from user_objects
  5   where object_name = 'PEOPLE' )
  6   /

NAME                           SEGCOLLENGTH
------------------------------ ------------
SYS_NC_OID$                              16
SYS_NC_ROWINFO$                           1
NAME                                     20
DOB                                       7
HOME_ADDRESS                              1
SYS_NC00006$                             30
SYS_NC00007$                             30
SYS_NC00008$                              2
SYS_NC00009$                             22
WORK_ADDRESS                              1
SYS_NC00011$                             30

NAME                           SEGCOLLENGTH
------------------------------ ------------
SYS_NC00012$                             30
SYS_NC00013$                              2
SYS_NC00014$                             22

14 rows selected.
這裡看到物件表PEOPLE有14列!與前面的4列大不同。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15720542/viewspace-722213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章