-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. 很少有表不应该有主键的情况。

外键旨在强制数据库中的参照完整性。因此,此模式中至少应该有一个或两个以上的表。

一个典型的情况可能是这样的,它假设相同的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,则可以内联引用它,如下所示:

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.

如果您当前正在查看表格,我将删除andphone并进行连接以获取该信息:postcodeagencyagency

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 回答