【问题标题】:Creating Table (Oracle)创建表 (Oracle)
【发布时间】:2014-04-06 19:49:40
【问题描述】:

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

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)
   );

【问题讨论】:

  • 将外键声明放在约束子句中。
  • 为什么它在我有它的地方不起作用?我以为你可以在这两个地方都这样做。
  • 我不是很擅长理论,但我可以把事情做好。

标签: sql oracle create-table


【解决方案1】:

语法:http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#SQLRF52167
请注意,“内联”约束语法是:“col col_type REFERENCES TAB(COL)”而不是“FOREIGN KEY”

数字的数据类型是 NUMBER 而不是 NUMERIC

所以我的记忆并没有欺骗我——你可以有多个内联约束(尽管语法图没有显示):

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)
       );
    

    (注意逗号,并引用新表列)

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2011-02-18
      相关资源
      最近更新 更多