2012-04-29 9 views
2

私は、別のユーザーの一部であるキーを参照しています:異なるユーザー間で外部キーを参照

例:user2が主キーとして携帯電話を持つテーブルを保持している

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

を。

どうすればこの問題を解決できますか?

+2

ていますか?どうして 'varchar2'? user2.contactsの列を参照していないので、[構文を見て](http://www.techonthenet.com/oracle/foreign_keys/foreign_keys.php)もお勧めします。 – Ben

答えて

4

USER2は、ユーザーの表に対するREFERENCES権限をユーザーに付与する必要があります。その他の権限とは異なり、参照は常に直接付与する必要があり、

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

それは次のようにする必要があります:すべての列が本当に `char`

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

あなたの質問に投稿したのと同じ構文ですが、これは間違っています。私は私の答えにcompilable statementを含んでいます。 – APC

関連する問題