这个SQL为什么会给出错误?
问题描述:
我有下面的SQL代码:这个SQL为什么会给出错误?
CREATE TABLE "MY_SCHEMA"."FLIGHT"
( "ID" NUMBER NOT NULL,
"SERVICE_SEQ_FK" NUMBER FOREIGN KEY REFERENCES SERVICE(SERVICE_SEQ)
);
它提供了以下错误:
SQL Error: ORA-00907: missing right parenthesis
什么右括号?
答
在定义直列外键,则foreign key
关键字不得用于:
CREATE TABLE MY_SCHEMA.FLIGHT
(
ID NUMBER NOT NULL,
SERVICE_SEQ_FK NUMBER REFERENCES SERVICE (SERVICE_SEQ)
);
详情请参见手册:http://docs.oracle.com/cd/E11882_01/server.112/e41084/clauses002.htm#CJAHIEIJ
答
- 首先摆脱掉那些双引号,他们以后只会麻烦你。
-
使用“ID”列的明确名称而不是“ID”。
CREATE TABLE MY_SCHEMA.FLIGHT ( ID_COL NUMBER NOT NULL, CONSTRAINT SERVICE_SEQ_FK FOREIGN KEY (SERVICE_SEQ) SERVICE(SERVICE_SEQ) );
更新:我觉得这是更好地提供在线和OUT-OF-线外键定义的例子。
内联外键(列定义的一部分):
CREATE TABLE t2 (
c1 NUMBER PRIMARY KEY,
c2 NUMBER REFERENCES t1(c1));
乱线外键(后列定义):
CREATE TABLE t3 (
c1 NUMBER,
c2 NUMBER,
CONSTRAINT t1_fk FOREIGN KEY (c1) REFERENCES t1);