2015-02-11 71 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专门创建的对象。