2014-04-06 71 views
1

我正在创建两个表。第一个表创建时没有错误,但是当我尝试创建SUBHEAD表时,出现错误:第2行,缺少右括号。我不确定这条线有什么问题。下面是我的SQL语句:创建表(Oracle)

CREATE TABLE HEAD 
    (Code NUMERIC(4,0) NOT NULL PRIMARY KEY, 
    HeadName VARCHAR(50) NOT NULL UNIQUE, 
    HType VARCHAR(1) NOT NULL, 
    HDate DATE NOT NULL, 
    OpBal DECIMAL(11,2) NOT NULL 
    ); 

CREATE TABLE SUBHEAD 
    (HCode NUMERIC(4,0) NOT NULL FOREIGN KEY REFERENCES HEAD(Code), 
    SubCode NUMERIC(4,0) NOT NULL, 
    SubName VARCHAR(50) NOT NULL, 
    SDate DATE NOT NULL, 
    OpBal DECIMAL (11,2) NOT NULL, 
    CONSTRAINT pk_subheadID PRIMARY KEY (HCode, SubCode) 
    ); 
+0

把外键声明的约束子句。 –

+0

它是如何起作用的?我以为你可以在两个地方做到这一点。 – Stc5097

+1

理论上我不是很大,但我可以完成任务。 –

回答

2

语法:http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#SQLRF52167
注意, “在线” 约束语法是: “山坳col_type参考TAB(COL)”,而不是 “主键”

数据类型号码是NUMBER不是数字

所以我的记忆没有骗我 - 你可以有多个在线的限制(虽然语法图并没有表现出来):

SQL> create table tt1(a number primary key); 

Table created. 

SQL> create table tt2(a number references tt1(a) not null); 

Table created. 
2
CREATE TABLE SUBHEAD 
    (HCode NUMERIC(4,0) NOT NULL, FOREIGN KEY (Hcode) REFERENCES HEAD(Code), 
    SubCode NUMERIC(4,0) NOT NULL, 
    SubName VARCHAR(50) NOT NULL, 
    SDate DATE NOT NULL, 
    OpBal DECIMAL (11,2) NOT NULL, 
    CONSTRAINT pk_subheadID PRIMARY KEY (HCode, SubCode) 
    ); 

(注意逗号,并参考新的表格列)