2016-04-22 3 views
0

Я пытаюсь утверждать, что funtom_customer таблицы является внешним ключом к таблице funtom_employee ...Constraint ошибки при создании таблицы: «Constraint спецификации гостей здесь не разрешено»

create table Funtom_customer 
(
    cust_ID   number(3) constraint cust_ID primary key, 
    cust_Name  varchar2(50) constraint cust_Name not null, 
    cust_Contact varchar2(50), 
    cust_Acmanager number(3) 
     CONSTRAINT cust_Acmanager FOREIGN KEY (funtom_employee), 
    cust_Addr1  varchar2(50), 
    cust_Addr2  varchar2(50), 
    cust_Addr3  varchar2(50), 
    cust_Addrpc  varchar2(10) 
); 
+1

Этот синтаксис просто неправильный. Какая таблица и столбец являются первичными ключами, на которые должен ссылаться ваш внешний ключ? –

+0

Вы уверены, что это не падает на 'ограничение cust_Name не null '. Вы не позволили называть «не null» ограничения, я бы предположил, что вы хотите ввести, возможно, уникальное ограничение и оставили его наполовину законченным? –

+0

@Damien_The_Unbeliever - на самом деле, вы можете; Я не думал, что вы можете это сделать, но эта часть действительна. Он даже не учитывает, что имя ограничения совпадает с именем столбца. –

ответ

0
create table Funtom_customer 
(
cust_ID  number(3) not null, 
cust_Name  varchar2(50) not null, 
cust_Contact  varchar2(50), 
cust_Acmanager number(3) , 
cust_Addr1 varchar2(50), 
cust_Addr2 varchar2(50), 
cust_Addr3 varchar2(50), 
cust_Addrpc varchar2(10) 
) 
; 


alter table Funtom_customer add constraint pk_cust_ID primary key (cust_ID); 
alter table Funtom_customer add constraint fk_cust_Acmanager foreign key (cust_Acmanager) references funtom_employee(referenced_col); 
+0

на 2-ом изменении Теперь я получаю сообщение об ошибке, пропуская левую скобку? Спасибо за помощь! –

+0

Вам нужно указать имя столбца в локальной таблице для FK. –

+0

Я не знаю вашего названного имени столбца, поэтому я назвал его «referenced_col» – Thomas

1

Вы синтаксис имеет неправильный характер несколькими способами. Предполагая, что первичный ключ в таблице funtom_employee называется emp_id, вы можете либо определить ограничения в линии:

create table funtom_customer 
(
    cust_id   number(3) primary key, 
    cust_name  varchar2(50) not null, 
    cust_contact varchar2(50), 
    cust_acmanager number(3) references funtom_employee (emp_id), 
    cust_addr1  varchar2(50), 
    cust_addr2  varchar2(50), 
    cust_addr3  varchar2(50), 
    cust_addrpc  varchar2(10) 
); 

... который заставит систему генерировать имена ограничений, или указать, вне -line как именованные ограничения:

create table funtom_customer 
(
    cust_id   number(3), 
    cust_name  varchar2(50) not null, 
    cust_contact varchar2(50), 
    cust_acmanager number(3), 
    cust_addr1  varchar2(50), 
    cust_addr2  varchar2(50), 
    cust_addr3  varchar2(50), 
    cust_addrpc  varchar2(10), 
    constraint pk_funtom_customer primary key (cust_id), 
    constraint fk_funtom_customer_acmanager foreign key (cust_acmanager) 
    references funtom_employee (emp_id) 
); 

Вы также можете создать таблицу и добавить ограничения после этого, как показал @Thomas.

Вы можете назвать ограничение, отличное от нуля, но это необычно; вы также можете иметь именованное ограничение, которое проверяет, что столбец не является нулевым, но тогда он не будет отображаться как недействительный в словаре данных (например, когда вы описываете таблицу).

+0

теперь отлично работает благодаря вашей помощи –

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