-5

次のコードは私に与えますERROR at line 3: ORA-00907: missing right parenthesis

CREATE TABLE ORGANISATION(
    ORG_REF VARCHAR(5),
    POSTCODE VARCHAR(10) FOREIGN KEY,
    TELEPHONE NUMBER FOREIGN KEY, 
    DESCRIPTION VARCHAR(30),
 AGENCY_ID VARCHAR(5));

行 3 のコードは非常に面倒です。なぜなら、行を見るとスペルミスがなく、すべてが適切な場所にあるからです。

4

3 に答える 3

5

それは外部キーを定義する方法ではありません。外部キーは、そのパートナーを見つける方法を知っている必要があります。

ここを読む: http://www.techonthenet.com/oracle/foreign_keys/foreign_keys.php

外部キーの定義は次のようになります。

CREATE TABLE ORGANISATION(
  ORG_REF VARCHAR(5),
  POSTCODE VARCHAR(10), --THIS WILL BE FOREIGN KEY
  TELEPHONE NUMBER,     --2nd FOREIGN KEY
  DESCRIPTION VARCHAR(30),
  AGENCY_ID VARCHAR(5),
     FOREIGN KEY FK_POSTCODE
     REFERENCES other_table (post_code),
     FOREIGN KEY FK_TELEPHONE
     REFERENCES other_table2 (phone)
);

アップデート:

于 2012-04-29T16:33:20.787 に答える
4

どこから始めれば?

  1. varchar2notを使用する必要がありvarcharます。それらは現在同一ですが、の将来の動作varcharは保証されていません
  2. 数値フィールドとしての電話番号? 多くの電話番号は 0 で始まります。これを失うことになります。うまく表示したい場合は、終了時にファンキーな文字列操作を行う必要があります。
  3. ID が数字の場合は、数字として保存する必要があります。
  4. テーブルが主キーを持つべきでない状況はめったにありません。

外部キーは、データベースで参照整合性を強化するように設計されています。したがって、このスキーマには少なくとも 1 つまたは 2 つのテーブルが必要です。

典型的な状況は、同じpostcode,phone組み合わせが に存在することを前提として、このようなものになる可能性がありますagency

CREATE TABLE ORGANISATION(
    ORG_REF VARCHAR2(5),
    POSTCODE VARCHAR2(10) ,
    TELEPHONE VARCHAR2(50), 
    DESCRIPTION VARCHAR(30),
    AGENCY_ID VARCHAR(5),
    CONSTRAINT PK_ORGANISATION PRIMARY KEY ( org_ref ),
    CONSTRAINT FX_ORGANISATION FOREIGN KEY
       REFERENCES SOME_OTHER_TABLE(POSTCODE,PHONE)
   );

2 列ではなく 1 列だけの場合は、次のようにインラインで参照できます。

create table organisation (
     org_ref number(16) not null
   , phone varchar2(5) not null constraint fk_organisation
        references agency ( phone )
   , constraint pk_organisation primary key ( org_ref )
   );

ただし、これが機能するかどうかは非常に疑わしいです。外部キーは一意の制約を参照する必要があります。したがって、コメントから判断するagencyと、一意の制約または主キーを持つテーブルが必要phone, postcodeです。

あなたのデータモデルに欠陥があると思われます。組織が から継承しているかのように聞こえますagency

現在テーブルを見ている場合は、phoneandpostcodeを削除し、結合を実行してその情報を取得します。agencyagency

select a.*, o.postcode, o.phone
  from agency a
  join organisation o
    on a.agency_id = o.agency_id
 where a.id = 12345

参考文献:

于 2012-04-29T16:53:56.697 に答える
0
CREATE TABLE ORGANISATION(
    ORG_REF VARCHAR(5),
    POSTCODE VARCHAR(10),
    TELEPHONE NUMBER, 
    DESCRIPTION VARCHAR(30),
    AGENCY_ID VARCHAR(5),
    constraint pcodefk foreign key(POSTCODE) references postalcodetable(POSTALCODE),
    constraint telefk  foreign key(TELEPHONE) references telephonenumbers(TELEPHONE));
于 2012-04-30T20:01:13.373 に答える