oracle表创建

时间:2012-04-29 16:27:34

标签: sql oracle oracle10g oracle11g

以下代码为我提供了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行代码非常烦人,因为查看该行没有拼写错误,一切都在正确的位置。

3 个答案:

答案 0 :(得分: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)
);

<强>更新

答案 1 :(得分:4)

从哪里开始?

  1. 您应该使用varchar2而不是varchar。虽然它们目前是相同的the future behaviour of varchar is not guaranteed
  2. 电话号码作为数字字段?很多电话号码都以0开头。你输了。如果你想要很好地显示它,你必须在退出时做一些时髦的字符串操作。
  3. 如果您的ID是数字,那么您应该将它们存储为数字。
  4. 很少有表格应not have a primary key
  5. 外键旨在强制执行数据库中的referential integrity。因此,此模式中应至少有一个或两个表。

    典型情况可能是这样的,它假设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

    如果您当前正在查看phone表格,我会从postcode中移除agencyagency,只是进行联接以获取该信息:< / p>

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

    进一步阅读:

答案 2 :(得分: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));