2014-03-18 43 views
1

我有一個sales_person_type定義如下:Oracle中創建表的主鍵

CREATE OR REPLACE TYPE sales_person_type UNDER person_type (
    salesAppointments  sales_person_appointments 
); 

這是被定義爲這樣的person_type的子類:

CREATE OR REPLACE TYPE person_type AS OBJECT (
    personID   NUMBER, 
    forename    VARCHAR2(30), 
    surname    VARCHAR2(20), 
    dateOfBirth   DATE 
) NOT FINAL; 

我試圖創建銷售人員表並將主鍵指定爲超類屬性,如下所示:

CREATE TABLE sales_person_table OF sales_person_type ( 
    PRIMARY KEY (personID), 
    OBJECT IDENTIFIER IS PRIMARY KEY)      
    NESTED TABLE salesAppointments STORE AS sale_appointment_table ( 
    (PRIMARY KEY(NESTED_TABLE_ID, appointmentID))    
    ORGANIZATION INDEX COMPRESS)       
    RETURN AS LOCATOR 

但我得到這個錯誤:

SQL Error: ORA-02330: datatype specification not allowed 02330. 00000 - "datatype specification not allowed" *Cause: An attempt was made to specify the data type in the column constraint specification of an object table.

我想這是因爲即時嘗試將主鍵分配爲超類attibute?這是正確的語法嗎?

乾杯。

編輯:

現在的作品,謝謝Dimitry。

回答

0

檢查CREATE TABLE的OID子句的語法:

SQL> CREATE OR REPLACE TYPE person_type AS OBJECT (
    2  personID   NUMBER, 
    3  forename    VARCHAR2(30), 
    4  surname    VARCHAR2(20), 
    5  dateOfBirth   DATE 
    6 ) NOT FINAL; 
    7/

SQL> create or replace type sale_appointment is object 
    2 (
    3  appointmentID integer 
    4 ); 
    5/

Тип создан. 

SQL> create type sales_person_appointments as table of sale_appointment; 
    2/


SQL> CREATE OR REPLACE TYPE sales_person_type UNDER person_type (
    2  salesAppointments  sales_person_appointments 
    3 ); 
    4/

SQL> CREATE TABLE sales_person_table OF sales_person_type (
    2 PRIMARY KEY (personID) 
    3 ) 
    4 OBJECT IDENTIFIER IS PRIMARY KEY 
    5 NESTED TABLE salesAppointments STORE AS sale_appointment_table (
    6 (PRIMARY KEY(NESTED_TABLE_ID, appointmentID)) 
    7 ORGANIZATION INDEX COMPRESS) 
    8 RETURN AS LOCATOR 
    9/

Table created.