以下代码为我提供了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行代码非常烦人,因为查看该行没有拼写错误,一切都在正确的位置。
答案 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)
从哪里开始?
varchar2
而不是varchar
。虽然它们目前是相同的the future behaviour of varchar
is not guaranteed 外键旨在强制执行数据库中的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
中移除agency
和agency
,只是进行联接以获取该信息:< / 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));