【问题标题】:While creating table in oracle database it is showing right parenthesis missing error在 oracle 数据库中创建表时显示右括号丢失错误
【发布时间】:2018-10-03 05:23:21
【问题描述】:

在oracle数据库中创建表时显示右括号丢失错误

CREATE TABLE Catalog(
sid VARCHAR2(50) FOREIGN KEY REFERENCES Suppliers(sid),
pid VARCHAR2(50) FOREIGN KEY REFERENCES Parts(pid),
quantity VARCHAR2(50)
);

【问题讨论】:

  • SuppliersParts 表是否已经存在?

标签: oracle foreign-keys ddl


【解决方案1】:

您需要将FOREIGN KEY 的部分删除为:

CREATE TABLE Catalog(
sid VARCHAR2(50) REFERENCES Suppliers(sid),
pid VARCHAR2(50) REFERENCES Parts(pid),
quantity VARCHAR2(50)
);

或者您可以创建为:

CREATE TABLE Catalog
( sid VARCHAR2(50),
  pid VARCHAR2(50),
  quantity VARCHAR2(50),
    CONSTRAINT fk_supplier
    FOREIGN KEY (sid)
    REFERENCES suppliers(sid),
    CONSTRAINT fk_parts
    FOREIGN KEY (pid)
    REFERENCES parts(pid)    
);

通过定义FOREIGN CONSTRAINTS'名称

或者如果之前已经创建过表,可以通过以下方式,稍后添加约束:

CREATE TABLE Catalog
( sid VARCHAR2(50),
  pid VARCHAR2(50),
  quantity VARCHAR2(50)  
);

ALTER TABLE Catalog
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (sid)
  REFERENCES suppliers(sid);

ALTER TABLE Catalog
ADD CONSTRAINT fk_parts
  FOREIGN KEY (pid)
  REFERENCES parts(pid);  

【讨论】:

    【解决方案2】:

    约束语法是documented here

    inline_constraint::=

    out_of_line_constraint::=

    references_clause::=

    您的示例是内联,因为它们是列定义的一部分,而不是在单独的部分或语句中。

    我会这样写:

    create table catalog
    ( sid       references suppliers(sid)
    , pid       references parts(pid)
    , quantity  varchar2(50) );
    

    或者如果我想明确地命名它们:

    create table catalog
    ( sid       constraint cat_supplier_fk references suppliers(sid)
    , pid       constraint cat_part_fk references parts(pid)
    , quantity  varchar2(50) );
    

    如果需要,您可以显式覆盖默认数据类型,但我认为允许它从父级继承是更好的做法。 (您只能使用内联约束来执行此操作。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2014-09-21
      • 2012-09-28
      相关资源
      最近更新 更多