2012-04-29 2 views
2

Я ссылается ключ, который является частью другого пользователя:Реферирование внешних ключей разных пользователей

Примера:

create table emp 
    (name char(10) 
    , empid char(10) 
    , dob date 
    , phone char(14) 
    , primary key(empid) 
    , foreign key phone 
      references (user2.contacts) 
     ); 

где user2 держит таблицу, которая имеет телефон в качестве первичного ключа.

Как я могу это достичь?

+2

ли все ваши столбцы действительно 'char'? Почему бы не «varchar2»? Я также рекомендую [смотреть на синтаксис] (http://www.techonthenet.com/oracle/foreign_keys/foreign_keys.php), поскольку вы не ссылаетесь на столбец в user2.contacts. – Ben

ответ

4

USER2 должен предоставить вашему пользователю привилегию «ССЫЛКИ» на их столе.

grant references on contacts to user1 
/

Обратите внимание, что в отличие от других привилегий, ССЫЛКИ должны всегда предоставляться напрямую. USER1 не сможет создать внешний ключ, если привилегия предоставляется через роль.

Синтаксис для внешних ключей требует, чтобы мы включили первичный ключ (или, по меньшей мере, уникальный ключ) столбец в ссылке:

create table emp  
(name char(10)  
     , empid char(10)  
     , dob date 
     , phone char(14) 
     , constraint emp_pk primary key(empid) 
     , constraint emp_contact foreign key (phone) 
      references (user2.contacts.phone)  ); 

Это хорошая практика, чтобы назвать наши в явной форме ограничений, как системы- сгенерированные имена - это боль для работы.

+0

На самом деле я получил: это должно быть примерно так: – zaki

-1

это должно быть так:

create table emp 
    (name char(10) 
    , empid char(10) 
    , dob date 
    , phone char(14) 
    , primary key(empid) 
    , foreign key phone 
      references user2.contacts) 
     ); 
+0

Это тот же синтаксис, что и вы отправили в ваш вопрос, что неверно. Я включил компилируемое заявление в свой ответ. – APC

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