2015-02-11 7 views
0

В настоящее время я пытаюсь создать таблицу людей, которая позволяет человеку быть либо клиентом, либо сотрудником. В настоящее время это мой код: -Oracle SQL - Table Create Issue

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" 

, что является причиной этой ошибки происходят, и что может быть сделано для его исправления. Любая помощь приветствуется.

******** EDIT **********

Я изменил имя таблицы person_tbl и все еще получаю ту же ошибку. По некоторым причинам, эта ошибка появится в журнале компилятор: -

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

Я понятия не имею, почему он не позволил мне использовать тип Person, как я triede этого метода перед успешно.

+1

Вам это нужно. 'Создайте TYPE PersonTable как ТАБЛИЦУ ЧЕЛОВЕКА:' На самом деле вы не можете создать таблицу с кучей с типом. –

+0

@MaheswaranRavisankar: в Oracle вы можете создать «таблицу объектов» на основе типа. Синтаксис в вопросе действителен, вне проблем, рассмотренных в ответах. – Allan

ответ

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, в целом) перегружен. В первом абзаце я говорю о «объектах базы данных», что почти все, что создано в базе данных с помощью команды create. В остальном я говорю о «объектных типах», которые являются объектами, созданными в create type ... object.

Смежные вопросы