2015-02-11 90 views
0

我目前正在嘗試創建一個人員表格,允許某人成爲客戶或員工成員。目前,這是我的代碼: -Oracle SQL - 表創建問題

Create Or Replace Type Person As OBJECT 
(
    person_id number(5) not null, 
    firstname varchar2(15) not null, 
    surname varchar2(15) not null, 
    address1 varchar2(70) not null, 
    address2 varchar2(70), 
    address3 varchar2(70), 
    postcode varchar2(9) not null 
); 
/

Create Or Replace Type Client Under Person 
(
    marital_status varchar2(10), 
    no_of_children number(2) 
); 
/

Create Or Replace Type Staff Under Person 
(
    job_title varchar2(15) not null, 
    salary number(4,2) not null, 
    manager_id number(5) not null 
); 
/

Create Table Person Of Person 
(
    person_id Primary Key 
); 

對象類型的所有編譯但是當它來創建表,我收到以下錯誤: -

SQL Error: ORA-00902: invalid datatype 
00902. 00000 - "invalid datatype" 

是什麼原因造成這個錯誤發生什麼可以做到糾正它。任何幫助是極大的讚賞。

********編輯**********

我已經改變了表的名稱person_tbl,仍然得到同樣的錯誤。出於某種原因,這個錯誤現在出現在編譯器日誌: -

Error: PL/SQL: Compilation unit analysis terminated 
Error(1,18): PLS-00905: object [ConnectionName].PERSON is invalid 

我不知道爲什麼它沒有讓我使用人物類型,因爲我已經triede此方法之前成功。

+1

你需要這個。 '將TYPE PersonTable創建爲TABLE的Person;'實際上,不能用類型創建一個堆組織的表。 – 2015-02-11 14:41:51

+0

@MaheswaranRavisankar:在Oracle中,您可以根據類型創建一個「對象表」。問題中的語法是有效的,不包括答案中提到的問題。 – Allan 2015-02-11 15:52:48

回答

1

不知道,爲什麼你會得到這些錯誤。你應該得到錯誤

00955. 00000 - "name is already used by an existing object" 

當試圖創建一個與類型相同的名稱的表。

嘗試

Create Table Persons Of Person 
(
    person_id Primary Key 
); 
1

你有幾個問題。正如@tonirush所說,你不能在同一個數據庫中擁有多個對象。

此外,person類型正在編譯有錯誤(特別是PLS-00218: a variable declared NOT NULL must have an initialization assignment)。在解決這些錯誤之前,您無法基於對象構建對象表。

您的子類型也有編譯錯誤:PLS-00590: attempting to create a subtype UNDER a FINAL type,但這與無法創建對象表無關。


作爲腳註,此答案中(以及在Oracle數據庫中,通常)中的「object」一詞被重載。在第一段中,我正在談論「數據庫對象」,它幾乎是使用create命令在數據庫中創建的任何東西。其餘的我說的是「對象類型」,它們是由create type ... object專門創建的對象。